springMVC jsp sends two different objects to Controller

I recently learned springmvc and wanted to transfer the data of two java objects from jsp to the Controller for automatic assembly. After checking on the Internet for a long time, it was the transfer of List objects, and finally I found the transfer of multiple java objects.
Here, the update of user (User) and user detailed information (UserDetail) is taken as an example. When updating user information, User and UserDetail are transmitted at the same time.
UserDetail uses User's id as the primary key and foreign key:
User.java

@Component
public class User {

    private int id;
    private String name;
    private int age=0;
    //getter and setter
}

UserDetail.java

@Component
public class UserDetail {
    private int id;
    private String sex;
    private String phone;
    private String address;
    //getter and setter
}

Key method:
UserController

    @RequestMapping(value="/updateuser.action",method=RequestMethod.POST)
    public ModelAndView updateUser(User user,UserDetail userDetail){

        System.out.println("================="+user.getId()+"================");
        System.out.println("================="+user.getName()+"================");
        System.out.println("================="+userDetail.getSex()+"================");
    System.out.println("================="+userDetail.getPhone()+"================");
    System.out.println("================="+userDetail.getAddress()+"================");
            userService.updateUser(user,userDetail);
    }

    @InitBinder("user")
    public void userBinder(WebDataBinder webDataBinder){
        webDataBinder.setFieldDefaultPrefix("user.");
    }

    @InitBinder("userDetail")
    public void userDetailBinder(WebDataBinder webDataBinder){
        webDataBinder.setFieldDefaultPrefix("userDetail.");
    }

webDataBinder.setFieldDefaultPrefix("user."); to indicate that user.id is used to transmit parameters in jsp, see clearly that there is "." on it .
Here @InitBinder is used to bind parameters. The parameters in InitBinder pass the test and seem to be named after the camel case of the class name. I did some experiments:

  • I named UserBean with @Compoment("User"), but the parameter of @InitBinder must be camel case "user" to be valid
  • I modified the parameter name in the updateUser method and changed User user to User users, but the result still has to be camel case "user" to receive the value

jsp page:

            <div class="modal-body">
                编号:<input type="text" name="user.id" id="editId" readonly="true"/><br>
                姓名:<input type="text" name="user.name" id="editName" /><br> 
                年龄:<input type="text" name="user.age" id="editAge" /><br>
            性别:<input id="editSex" type="radio" name="userDetail.sex" value="男"/>男
                <input id="editSex" type="radio" name="userDetail.sex" value="女"/>女<br> 
                电话:<input type="text" name="userDetail.phone" id="editPhone"/><br> 
                地址:<input type="text" name="userDetail.address" id="editAddress"/>
            </div>

result:

=================15================
=================大金================
=================男================
=================123456789================
=================广州大学城================

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325636449&siteId=291194637