2015-02-28 1 views
1

Я собираюсь использовать @ModelAttribute вместо @RequestParam, чтобы связать пользовательский ввод и записать его в базу данных. Я просто смущен, когда @ModelAttribute связывает данные в моем методе обработчика запроса (@ModelAttribute book Book) в качестве объекта книги, то как передать этот объект в базу данных? Обычно с использованием @RequestParam Я привязываю переменную пользователя к переменной в соответствии с моим классом модели, а затем отправляю их в db с использованием соответствующего метода DAO. Я показываю свои занятия ниже. Может ли кто-нибудь сказать, как мой метод обработчика запросов должен выглядеть, если я использую @ModelAttribute?Как использовать аннотацию @ModelAttribute для передачи объекта в базу данных?

Модель Класс:

@Component 
public class Book { 
int bookId; 
String title; 
Author author; 
Publisher publisher; 

public int getBookId() { 
    return bookId; 
} 

public void setBookId(int bookId) { 
    this.bookId = bookId; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public Author getAuthor() { 
    return author; 
} 

public void setAuthor(Author author) { 
    this.author = author; 
} 

public Publisher getPublisher() { 
    return publisher; 
} 

public void setPublisher(Publisher publisher) { 
    this.publisher = publisher; 
} 
} 

DAO:

public class BookDAO extends JdbcDaoSupport { 
@Autowired 
AuthorDAO authorDAO; 
@Autowired 
PublisherDAO publisherDAO; 

public void addBook(String title, int authorId, int publisherId) 
     throws ClassNotFoundException, SQLException { 

    String sql = "insert into tbl_book (title, authId, pubId) values (?, ?, ?)"; 
    this.getJdbcTemplate().update(sql, new Object[]{title, authorId, publisherId}); 
} 
} 

Услуги:

@Service 
public class BookService { 

@Autowired 
BookDAO bookDAO; 

public Book getBookById(int bookId) throws ClassNotFoundException, 
     SQLException { 

    return bookDAO.getBookById(bookId); 

} 

public List<Book> getAllBooks() throws ClassNotFoundException, 
     SQLException { 

    List<Book> bookList = bookDAO.getAllBooks(); 
    return bookList; 

} 

public void addBook(String title, int authorId, int publisherId) throws ClassNotFoundException, 
     SQLException { 

    bookDAO.addBook(title, authorId, publisherId); 
} 
} 

Контроллер:

@Controller 

класс BookController общественного {

@RequestMapping(value = "/addBookExecution", method = equestMethod.POST) 
protected ModelAndView addBookExecution(@RequestParam String title, 
     @RequestParam int authorId, @RequestParam int blisherId) 
     throws ClassNotFoundException, SQLException { 
    bookService.addBook(title, authorId, publisherId); 
    ModelAndView model = new ModelAndView("adminFunctionsPage"); 
    model.addObject("Msg", "Your request has been processed successfully."); 
    return model; 

} 
} 
+0

проверить эту http://stackoverflow.com/questions/3423262/what-is -modelattribute-in-spring-mvc –

+0

Спасибо за ссылку. Я знаю использование @ModelAttribute и способ привязки данных. Я просто не знаю, как передать объект в базу данных. Если вы видите мой метод addBook(), ему нужно получить три параметра для выполнения задания. Но в этом случае у меня есть объект. Мой вопрос: могу ли я отправить объект, не разбивая его на эти параметры? – Nisman

+0

вам не нужно делать все, что вам нужно, это имена свойств объекта, а имена параметров формы должны быть равны –

ответ

-1

Ваша форма должна иметь параметры имена, как ваши книги объект, проверьте ниже пример кода

<form > 
<input type="text" name="authorId"/> 
<input type="text" name="authorName"/> 
etc... 
</form> 


Book.java 

class Book{ 
    Integer authorId; 
    String authorName; 
    etc.. 
} 
@RequestMapping(value = "/addBookExecution", method = equestMethod.POST) 
protected ModelAndView addBookExecution(@ModelAttribute Book book) 
     throws ClassNotFoundException, SQLException { 
    bookService.addBook(book); 
    ModelAndView model = new ModelAndView("adminFunctionsPage"); 
    model.addObject("Msg", "Your request has been processed successfully."); 
    return model; 

} 
+0

Большое спасибо Рамешу. – Nisman

+0

приветствую @Nisman, пожалуйста, примите его как ответ, если он сработает для вас –

+0

Ramesh У меня возникла еще одна проблема. У меня есть четыре переменные в моей книге, что два из них - объекты (int authorId, String title, Author author, Publisher Publisher). пользователь выбирает «автор» и «издатель» и вводит «заголовок», когда хочет добавить новую книгу. Я использую тег для отправки входов контроллеру. Но я не могу получить объекты «автор» и «издатель» в своем ModelAttribute. Я получил название, которое является строкой. У вас есть какой-либо намек на решение этой проблемы? – Nisman

Смежные вопросы