gpt4 book ai didi

java - 在表单之间导航时如何修复删除字段?

转载 作者:行者123 更新时间:2023-11-30 11:21:37 25 4
gpt4 key购买 nike

当我尝试在表单之间导航时,我不明白为什么我的 User 类字段值会消失。

@Controller
public class WizardController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String userForm(@ModelAttribute("user") User user) {
return "form/userForm";
}
@RequestMapping(value = "/user", method = RequestMethod.POST)
public String processedForm(@ModelAttribute("user") User user, BindingResult result,
ModelMap model) {
if (result.hasErrors()) {
return "form/userForm";
}
ArrayList<String> p = new ArrayList<String>();
p.add("add_user");
p.add("delete_user");
model.addAttribute("permissions", p);
model.addAttribute("user", user);
return "form/permissionForm";
}

@RequestMapping(value = "/show", method = RequestMethod.POST)
public String show(@ModelAttribute("user") User user, BindingResult result) {
if (result.hasErrors()) {
System.out.println("Error");
return "show";
} else {
System.out.println(user);
return "show";
}
}
}

我的permissionForm.jsp

<form:form action="/show" method="post" modelAttribute="user">
<form:errors path="*" cssClass="errorblock" element="div"/>
<p>
<form:select path="permissions">
<form:options items="${permissions}"/>
</form:select>
</p>
<p><input type="submit" value="Add"/></p>
</form:form>

用户表单.jsp

<form:form action="/user" method="post" modelAttribute="user">
<form:errors path="*" cssClass="errorblock" element="div"/>
<p><form:input path="name" placeholder="Name"/></p>
<p><form:input path="age" placeholder="Age"/></p>
<p><form:input path="email" placeholder="Email"/></p>
<p><form:input path="password" placeholder="Password"/></p>
<p><input type="submit"></p>
</form:form>

在 show.jsp 上我正在呈现我的用户

${user}

和POJO类

public class User implements Serializable {
private String name;
private String email;
private String password;
private Integer age;
private List<String> permissions;
// getters, setters, toString
}

输出:用户{name='null', email='null', password='null', age=null, permissions=[delete_user]}。我需要一个完整的对象,像这样:

用户{name='John', email='john@gmail.com', password='12345', age=21, permissions=[delete_user]}。

感谢您的帮助。

最佳答案

因为在 permissionForm.jsp 中,表单只有权限字段的输入,因此在提交时,它会传递一个只填充权限字段的用户对象,其余的将为空。如果您需要在其余字段中包含值,请像这样添加隐藏输入:

<form:form action="/show" method="post" modelAttribute="user">
<form:errors path="*" cssClass="errorblock" element="div"/>
<p>
<form:select path="permissions">
<form:options items="${permissions}"/>
</form:select>
<form:hidden path="name"/>
<form:hidden path="age"/>
<form:hidden path="email"/>
</p>
<p><input type="submit" value="Add"/></p>
</form:form>

但是,对于密码字段,我不建议在 JSP 中添加隐藏字段,因为它会将密码暴露给任何可以阅读 html 源代码的人。

另一个更好的解决方案是使用 session ,通过在表单之间的 session 中存储和修改用户,首先在第一次提交时存储用户:

@RequestMapping(value = "/user", method = RequestMethod.POST)
public String processedForm(@ModelAttribute("user") User user, BindingResult result,
ModelMap model,HttpSession session) {
if (result.hasErrors()) {
return "form/userForm";
}
session.setAttribute("user",user);
ArrayList<String> p = new ArrayList<String>();
p.add("add_user");
p.add("delete_user");
model.addAttribute("permissions", p);
model.addAttribute("user", user);
return "form/permissionForm";
}
@RequestMapping(value = "/show", method = RequestMethod.POST)
public String show(@ModelAttribute("user") User user, BindingResult result,HttpSession session) {
User userInSession = (User)session.getAttribute("user");
userInSession.setPermissions(user.getPermissions());

if (result.hasErrors()) {
System.out.println("Error");
return "show";
} else {
System.out.println(userInSession);
return "show";
}
}

关于java - 在表单之间导航时如何修复删除字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22149945/

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