Почему моя страница jsp отправляет null, когда я хочу связать пользовательский ввод с помощью аннотации @ModelAttribute в моем контроллере?

Я пытаюсь связать пользовательский ввод с помощью аннотации @ModelAttribute, когда пользователь хочет добавить новую книгу в базу данных (таблицу книг). Класс Book имеет четыре свойства (int bookId, String title, Author author, Publisher publisher). Пользователь просто вводит название, а затем выбирает автора и издателя из выпадающих списков. Когда форма отправлена, в объект модели в контроллере приходит только значение title, а автор и издатель равны нулю. Ниже я представляю свою форму и метод обработчика запросов. Кто-нибудь может сказать, где проблема в моей форме или, может быть, в моем классе контроллера?

addBook.jsp

<form action="addBookExecution" method="post">
<table>
<tr>
    <td>Enter Book's Name:</td>
    <td><input type="text" name="title"/></td>
</tr>
<tr>
    <td>Select Author: </td>
    <td><select name="author">
                <option>****select author****</option>
                <c:forEach var="author" items="${authorList}">
                    <option value="${author}">${author.authorName}</option>
                </c:forEach>
        </select>
    </td>
</tr>
<tr>
    <td>Select Publisher: </td>
    <td><select name="publisher">
                <option>****select publisher****</option>
                <c:forEach var="publisher" items="${publisherList}">
                    <option value="${publisher}">${publisher.publisherName}</option>
                </c:forEach>
        </select>
    </td>
</tr>
<tr>
    <td>Click here to submit the form:</td>
    <td><input type="submit" value="submit"/></td>
</tr>

Контроллер:

@RequestMapping(value = "/addBookExecution", method = RequestMethod.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;

}

person Nisman    schedule 02.03.2015    source источник


Ответы (1)


Я бы предложил использовать Spring Form.

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<form:form method="POST" commandname="book" action="addBookExecution">
  <table>
   <tr>
     <td><form:label path="title">Enter Book's Name:</form:label></td> 
     <td><form:input path="title"></form:input></td>
  </tr>
  <form:select path="author" items="${authorList}" multiple="true"/>
   -----similarly do for other html element
</form:form> 
person dReAmEr    schedule 02.03.2015
comment
Что я должен использовать для отображения списка авторов и издателей? - person Nisman; 02.03.2015
comment
только что обновил мой ответ для 1 поля выбора, сделайте это и для другого. - person dReAmEr; 02.03.2015