2013-03-04 5 views
0

На моей странице «Обновление» у меня есть скрытое поле для хранения идентификатора текущего пользователя, редактируемого. Я проверил источник HTML, и значение заполняется правильно. Однако, когда я отправляю форму, значение userID ALLWAYS проходит через 0, а каждое другое поле выполняется правильно.Спрятанное значение весны формы при отправке

-Проанализировав тип как форму: ввод и отправку, все еще 0 на стороне контроллера.
-Нет связывания с ошибками.
-Страница URL: /admin/update-user.html?uid=3 (Я пытался не изменив переменную URL из UID в идентификатор пользователя, никакой разницы.)

Так что, черт возьми, происходит ?! Я пропустил что-то очевидное?

JSTL

<form:form commandName="user" method="POST"> 
<form:hidden path="userID"/> 
<table width="400" cellpadding="3" cellspacing="0" border="0" class="datatable"> 
    <tr> 
     <td>User ID #</td> 
     <td>${user.userID}</td> 
    </tr> 
    <tr> 
     <td valign="top">Password</td> 
     <td>****<br /><a href="change-password.html?uid=${user.userID}">Change Password</a></td> 
    </tr> 
    <tr> 
     <td>First Name</td> 
     <td><form:input path="firstName" /></td> 
    </tr> 
    <tr> 
     <td>Last Name</td> 
     <td><form:input path="lastName" /></td> 
    </tr> 
    <tr> 
     <td>Gender: </td> 
     <td> 
      <form:select path="gender"> 
       <form:option value="Male" label="Male" /> 
       <form:option value="Female" label="Female" /> 
      </form:select> 
     </td> 
    </tr> 
    <tr> 
     <td>Birthday: </td> 
     <td><form:input path="birthday" id="datepickerpast" readonly="true" /></td> 
    </tr> 
    <tr> 
     <td>Email</td> 
     <td><form:input path="email" /></td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
     <td><input type="submit" value="Update" /> <input type="reset"></td> 
    </tr> 
</table> 
</form:form> 

Контроллер

@RequestMapping(value = "admin/update-user", method = RequestMethod.POST) 
public String processUpdateUser(ModelMap model, @ModelAttribute("user") User user, BindingResult result) throws SQLException { 
    if (result.hasErrors()) { 
     model.addAttribute("user", user); 
     model.addAttribute("pagetitle", "Admin - Update User Details"); 
     return "admin/users/update-user"; 
    } else { 
     userDao.updateUser(user); 
     return "redirect:/admin/user-management.html"; 
    } 
} 

Свойства объекта с соответствующими геттеры/сеттеры

private int userID; 
private String firstName; 
private String lastName; 
private String username; 
private String email; 
private Date birthday; 
private String gender; 
+0

Если вы нарушаете первую строку своего метода контроллера, вы видите объект User, заполненный? Имеет ли он идентификатор пользователя в этот момент? – CodeChimp

+0

Я сделал System.out.println в первой строке метода Controller для каждого свойства, userID равно 0, все остальное произошло с правильными значениями. – Felix

+0

Используя '@RequestParam ("userID") int userID' в моем вызове метода, я могу получить правильное значение. Итак, что-то о том, что userID не имеет обязательной привязки при отправке формы. – Felix

ответ

0

Реализовано, что мой получатель имел тип Integer, но мой сеттер и свойство были типа int. Сделал все из них Integer, и он сработал. Если кто-то может объяснить, почему не было ошибки при компиляции или почему это не сработало так, как было, это было бы очень полезно.

Вздох, идет 3 часа в моей жизни.

0

У вас возникла ошибка компилятора из-за autoboxing, которая позволяет автоматически преобразовывать примитивы в их альтернативы класса оболочки. Что касается того, почему это не сработало, когда геттер использовал Integer, я не могу вам помочь.

+0

Ahh ok, спасибо за информацию. – Felix