1

私は以下のコントローラーを持っています:

@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>

jspでコマンドオブジェクトuserDetailsCmduserDetailsCmd.userType)の値を設定/変更すると、 user.userTypeの値が常に変更されるのはなぜですか?これは、両方が同じ属性名(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...

   }
4

1 に答える 1