在struts2中实现了编辑功能。单击“提交”按钮后,我在JSP中显示的bean值在操作类中正确获取。
但是我在JSP中没有提到的bean的其他值返回null。
如果我在JSP中显示bean的所有值,那么我可以在Action中获取所有值。
这是解决此问题的方法。或者,还有其他任何方式。
Action类的代码是
UserForm userForm = new UserForm();
public String edit(){
String result = ActionSupport.ERROR;
HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get( ServletActionContext.HTTP_REQUEST);
HttpSession session = request.getSession(false);
if (null != session
&& null != (UserAccount) session.getAttribute(USER)) {
String editUser = (String) request
.getParameter(RequestAttributes.EDIT_USER);
UserAccount userAccount = userForm.getUserAccount();
if (null != editUser) {
//invoked when edit user page is submitted
userUtils.updateUserAccount(userAccount);
} else {
// invoked when edit user page gets loaded
String userAccSID = (String) request
.getParameter(USER_ACC_SID);
String roleSID = (String) request.getParameter(ROLE_SID);
if (null != userAccSID && null != roleSID) {
Long userAccSIDVal = Long.valueOf(userAccSID);
Long roleSIDVal = Long.valueOf(roleSID);
userAccount = userUtils
.loadUserAccount(userAccSIDVal);
userForm.setUserAccount(userAccount);
}
}
}
return result;
}
public UserForm getUserForm() {
return userForm;
}
public void setUserForm(UserForm userForm) {
this.userForm = userForm;
}
JSP页面的代码是
<s:form action="edit?editUser=edit">
<table align="center">
<s:hidden name="userForm.userAccount.createdBy"/>
<tr align="center">
<th>Edit User</th>
</tr>
<tr>
<td><s:textfield name="userForm.userAccount.firstName" label="First Name"/></td>
</tr>
<tr>
<td><s:textfield name="userForm.userAccount.lastName" label="Last Name"/></td>
</tr>
<tr>
<td><s:submit value="Save" /><s:reset value="Cancel" /></td>
</tr>
</table>
现在,如果我将createdBy设置为隐藏,那么我可以在Action中获得createdBy的值。 它的值已经由动作类设置。 那么,为什么我也应该在jsp页面中设置?
任何帮助都将受到高度赞赏。感谢
答案 0 :(得分:1)
如果您没有从JSP返回值,那么它们如何在表单提交时可用于Action类。 一种解决方案是创建隐藏字段并设置您不希望在JSP页面上向用户显示的值,这样,当您点击提交按钮时,这些值将被提交给操作。
其他选项是在Session中存储数据或获取操作类中的值,但在我们没有其他选项之前,它们不是首选解决方案。