为什么 ModelMap 属性的值在 jsp 中发生变化?
我有一个控制器如下:
@Controller
@SessionAttributes("user")
public class UserController {
@Autowired
AdminDaoInterface adminDao;
@Autowired
UserValidator userValidator;
@RequestMapping(value="userdetails.htm",method=RequestMethod.GET)
public String userDetails(ModelMap model) {
UserCommand userDetailsCmd = new UserCommand();
model.addAttribute("userDetailsCmd", userDetailsCmd);
return "UserDetails"; // will go to UserDetails.jsp
}
@RequestMapping(value="userdetails.htm",method = RequestMethod.POST)
public String userDetailsSubmit(
@ModelAttribute("userDetailsCmd") UserCommand userDetailsCmd,
Errors errors, ModelMap model){
//user will contains details of user found from database.
User user=adminDao.getUserOnId(userDetailsCmd.getUserId());
if(user==null) {
errors.rejectValue("userId", "user.not.exists");
return "UserDetails";
}
model.addAttribute("user",user);
return "ChangeUserDetails"; // will go to ChangeUserDetails.jsp
}
@RequestMapping(value="changeuserdetails.htm",method = RequestMethod.POST)
public String changeUserDetails(
@ModelAttribute("userDetailsCmd") UserCommand userDetailsCmd,
@ModelAttribute("user") User user){
// some stuff...
// BOTH user and userDetailsCmd OBJECTS HAVE A FIELD "userType"
// HERE user.userType SHOULD CONTAIN VALUE COLLECTED FROM DB (already
// existing value)
// AND userDetailsCmd.userType SHOULD CONTAIN VALUE SELECTED IN JSP IN
//ORDER TO UPDATE EXISTING VALUE of user.userType.
...
//BUT WHEN I SET VALUE OF userDetailsCmd.userType IN JSP, WHY VALUE OF
// user.userType GOT CHANGED ALWAYS TO THAT VALUE???
...
// somewhere later in code i m setting user.userType to
//userDetailsCmd.userType to update value.
adminDao.updateUser(user);
return "ChangeUserSuccess";
}
}
ChangeUserDetails.jsp 是:
<form:form method="post" action="changeuserdetails.htm" commandName="userDetailsCmd">
<table>
<tr>
<td>User Id :</td>
<td>${user.userId}</td>
</tr>
<tr>
<td>Project :</td>
<td>${user.projectId} </td>
<td>Change To:</td>
<td>
<form:select path="projectId">
<form:option value="-1" label="SELECT"/>
<form:options items="${projectList}" itemValue="pid"
itemLabel="projectName"/>
</form:select>
</td>
</tr>
<tr>
<td>User Type :</td>
<td>${user.userType}</td>
<td>Change To:</td>
<td>
<form:select path="userType">
<form:option value="not changed" label="SELECT"/>
<form:option value="admin" label="Admin" />
<form:option value="user" label="User" />
</form:select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Change User Details"/>
</td>
</tr>
</table>
</form:form>
为什么当我设置/更改命令对象 userDetailsCmd 的值时 user.userType 的值总是发生变化(userDetailsCmd .userType)在jsp中? 这是因为两者具有相同的属性名称(userType)吗?
编辑: UserCommand 类(命令对象)是:
public class UserCommand{
private String userId;
private String password;
private int projectId;
private String userType;
private int listUserId;
private List usersList;
//PLUS getters and setters for these fields...
}
而 User 类(POJO)是:
public class User{
private String userId;
private String password;
private int projectId;
private String userType;
//PLUS getters and setters for these fields...
}
i have a controller given below:
@Controller
@SessionAttributes("user")
public class UserController {
@Autowired
AdminDaoInterface adminDao;
@Autowired
UserValidator userValidator;
@RequestMapping(value="userdetails.htm",method=RequestMethod.GET)
public String userDetails(ModelMap model) {
UserCommand userDetailsCmd = new UserCommand();
model.addAttribute("userDetailsCmd", userDetailsCmd);
return "UserDetails"; // will go to UserDetails.jsp
}
@RequestMapping(value="userdetails.htm",method = RequestMethod.POST)
public String userDetailsSubmit(
@ModelAttribute("userDetailsCmd") UserCommand userDetailsCmd,
Errors errors, ModelMap model){
//user will contains details of user found from database.
User user=adminDao.getUserOnId(userDetailsCmd.getUserId());
if(user==null) {
errors.rejectValue("userId", "user.not.exists");
return "UserDetails";
}
model.addAttribute("user",user);
return "ChangeUserDetails"; // will go to ChangeUserDetails.jsp
}
@RequestMapping(value="changeuserdetails.htm",method = RequestMethod.POST)
public String changeUserDetails(
@ModelAttribute("userDetailsCmd") UserCommand userDetailsCmd,
@ModelAttribute("user") User user){
// some stuff...
// BOTH user and userDetailsCmd OBJECTS HAVE A FIELD "userType"
// HERE user.userType SHOULD CONTAIN VALUE COLLECTED FROM DB (already
// existing value)
// AND userDetailsCmd.userType SHOULD CONTAIN VALUE SELECTED IN JSP IN
//ORDER TO UPDATE EXISTING VALUE of user.userType.
...
//BUT WHEN I SET VALUE OF userDetailsCmd.userType IN JSP, WHY VALUE OF
// user.userType GOT CHANGED ALWAYS TO THAT VALUE???
...
// somewhere later in code i m setting user.userType to
//userDetailsCmd.userType to update value.
adminDao.updateUser(user);
return "ChangeUserSuccess";
}
}
ChangeUserDetails.jsp is:
<form:form method="post" action="changeuserdetails.htm" commandName="userDetailsCmd">
<table>
<tr>
<td>User Id :</td>
<td>${user.userId}</td>
</tr>
<tr>
<td>Project :</td>
<td>${user.projectId} </td>
<td>Change To:</td>
<td>
<form:select path="projectId">
<form:option value="-1" label="SELECT"/>
<form:options items="${projectList}" itemValue="pid"
itemLabel="projectName"/>
</form:select>
</td>
</tr>
<tr>
<td>User Type :</td>
<td>${user.userType}</td>
<td>Change To:</td>
<td>
<form:select path="userType">
<form:option value="not changed" label="SELECT"/>
<form:option value="admin" label="Admin" />
<form:option value="user" label="User" />
</form:select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Change User Details"/>
</td>
</tr>
</table>
</form:form>
why value of user.userType always got changed when i set/change value of command object userDetailsCmd (userDetailsCmd.userType) in jsp?
is this because both have same attribute name (userType)?
EDIT:
UserCommand class (command object)is :
public class UserCommand{
private String userId;
private String password;
private int projectId;
private String userType;
private int listUserId;
private List usersList;
//PLUS getters and setters for these fields...
}
And User class (a POJO )is:
public class User{
private String userId;
private String password;
private int projectId;
private String userType;
//PLUS getters and setters for these fields...
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
将其添加到您的控制器中,
User
对象的userType
字段将不会被填充。Add this to your controller and the
userType
field of theUser
object will not get populated.