在当前的控制器中,我用我的userWrapper填充了无权使用应用程序的用户集合,并将其作为属性发送到jsp,它将在那里呈现。
ascii
在jsp中存在与UserWrapper集合用户的User对象绑定的复选框。我的jsp页面看起来像:
@RequestMapping(value = "/cockpit")
public String cockpit(Model model, UserWrapper receivedUserWrapper) {
siftOutEnabled(receivedUserWrapper);
try {
List<User> users = userService.findAllUsersWhoNotAccepted();
UserWrapper userWrapper = new UserWrapper();
userWrapper.setUsers(users);
model.addAttribute("wrapper", userWrapper);
model.addAttribute("users", userWrapper.getUsers());
} catch (UsersNotFoundException e) {
}
return "cockpit";
}
这个jsp页面呈现正确的结果:
<form:form method="POST" commandName="wrapper" action="cockpit">
<table>
<tr>
<th>id</th>
<th>mail</th>
<th>pass</th>
<th>registrationDate</th>
<th></th>
</tr>
<c:forEach items="${users}" var="user" varStatus="loop">
<tr>
<td>${user.id}</td>
<td>${user.email}</td>
<td>${user.password}</td>
<td>${user.registrationDate}</td>
<td><form:checkbox path="users[${loop.index}].enabled" />
</tr>
</c:forEach>
</table>
<input type="submit" name="submit" value="submit" />
</form:form>
每一行附近都存在checbox,当我检查一些行,并将帖子发送到控制器时,我只捕获这些值吗?复选框工作。
id mail pass registrationDate
1 market@test.ra pass 2016-02-02 21:46:40.0
2 tara@ra.ra passwd 2016-02-03 20:37:18.0
为什么值为null或0? 这是我的UserWrapper类和User consrtuctor:
[User [id=0, email=null, password=null, enabled=true],
User [id=0, email=null, password=null, enabled=false]]
更新 我还会问:如何将对象从控制器发送到jsp,在那里更改该对象,然后将此已经更改的对象发送回控制器......
更新
public class User implements Serializable {
...
public User(long id, String email, String password, Date registrationDate, boolean enabled) {
this.setEmail(email);
this.setPassword(password);
this.registrationDate = registrationDate;
this.setEnabled(enabled);
roles = new HashSet<>();
}
...
}
public class UserWrapper {
private boolean checked;
private List<User> users;
...
}
答案 0 :(得分:1)
问题出在你的jsp代码中,只有复选框可以在名称和值对中发送表单数据。因此,您只获得复选框的值。尝试按如下方式更新您的jsp。
<td>${user.id}<input type="hidden" name="users[${loop.index}].id" value="${user.id}"/></td>
<td>${user.email}<input type="hidden" name="users[${loop.index}].email" value="${user.email}"/></td>
<td>${user.password}<input type="hidden" name="users[${loop.index}].password" value="${user.password}"/></td>
<td>${user.registrationDate}<input type="hidden" name="users[${loop.index}].registrationDate" value="${user.registrationDate}"/></td>
<td><form:checkbox path="users[${loop.index}].enabled" />
<强>被修改强>
对于日期,您需要在控制器类中注册CustomDateEditor:
@InitBinder
public void initBinder(WebDataBinder binder) {
CustomDateEditor editor = new CustomDateEditor(new SimpleDateFormat("MM/dd/yyyy"), true);
binder.registerCustomEditor(Date.class, editor);
}