1
내가 컨트롤러는 아래있다 :jsp에서 ModelMap 속성의 값이 변경되는 이유는 무엇입니까?
@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입니다 : 내가 명령 개체 userDetailsCmd의/변경 값을 설정할 때 항상 변경있어
<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>
왜 값 의 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...
}
및 사용자 클래스 (A POJO)입니다 :
public class User{
private String userId;
private String password;
private int projectId;
private String userType;
//PLUS getters and setters for these fields...
}
나는 정말로 시도했지만, 당신이 의미하는 것을 이해하지 못했습니다. 예상되는 행동은 무엇이며 관찰 한 행동은 무엇입니까? – Ralph
@Ralph : ChangeUserDetails.jsp에서 필드 ** userType **에 대한 값을 선택하면 이상적으로 (나에 따라) 명령 객체 ** userDetailsCmd **의 값이 (userDetailsCmd.userType'으로) 변경되어야합니다. . 그러나 문제는'
글쎄, 사용자를 모델 속성으로 만들지 마라. changeUserDetails 메소드의 인수에서 제거하십시오. –