gpt4 book ai didi

java - Jsp 表单 post 将空对象传递给 Spring Controller

转载 作者:行者123 更新时间:2023-12-01 10:28:26 25 4
gpt4 key购买 nike

在当前 Controller 中,我用无权访问使用应用程序的用户集合填充我的userWrapper,并将其作为属性发送到它将呈现的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中存在与UserWrapper集合用户的User对象绑定(bind)的复选框。我的 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>

这个jsp页面呈现正确的结果:

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

几乎每一行都存在复选框,当我检查某些行并将帖子发送到 Controller 时,我只捕获这些值吗?复选框有效。

[User [id=0, email=null, password=null, enabled=true], 
User [id=0, email=null, password=null, enabled=false]]

为什么值为 null 或 0?这是我的 UserWrapper 类和 User 构造函数:

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;

...
}

更新我还想问:如何将对象从 Controller 发送到jsp,在那里更改该对象,然后将这个已经更改的对象发送回 Controller ...

更新

public class SpringMvcIntializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { ApplicationConfig.class };
}

@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { WebMvcConfig.class };
}

@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}

}

最佳答案

问题出在您的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" />

已编辑

对于需要在 Controller 类中注册 CustomDateEditor 的日期,如下所示:

@InitBinder
public void initBinder(WebDataBinder binder) {
CustomDateEditor editor = new CustomDateEditor(new SimpleDateFormat("MM/dd/yyyy"), true);
binder.registerCustomEditor(Date.class, editor);
}

关于java - Jsp 表单 post 将空对象传递给 Spring Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35233726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com