1

我使用 spring 框架和其他一些框架(我是初学者)开发了一个 MVC 应用程序。我有一个控制器来管理 jsp 处理,例如,当我想将新人员添加到我的“人员列表”时,我调用实例化人员对象并将其传递给与 add 方法对应的 jsp 视图。我通过这样的方法做到这一点:

@RequestMapping(value = "/persons/add", method = RequestMethod.GET)
public String getAdd(Model model) {
    logger.debug("Received request to show add page");

    // Create new UserDomain and add to model
    // This is the formBackingOBject
    model.addAttribute("personAttribute", new UserDomain());

    // This will resolve to /WEB-INF/jsp/addpage.jsp
    return "addpage-tiles";
}

我的问题是,现在,我想通过向模型添加两个不同的对象,例如,我想通过'new UserDomain()'以及来自我数据库中另一个表的另一个对象,例如一个“新用户安全()”。我想我应该使用'modelMap'而不是'model.addAttribute ...',但我不能这样做,所以如果有人可以帮助我。我通过以下代码从 jsp 获取我的模型:

<form:form modelAttribute="personAttribute" method="POST" action="${saveUrl}">
<table>
    <tr>
        <td><form:label path="firstName">First Name:</form:label></td>
        <td><form:input path="firstName"/></td>
    </tr>
    <tr>
        <td><form:label path="lastName">Last Name</form:label></td>
        <td><form:input path="lastName"/></td>
    </tr>   
     <tr>
        <td><form:label path="userName">User name</form:label></td>
        <td><form:input path="userName"/></td>
    </tr>   
    <tr>
        <td><form:label path="email">E-mail</form:label></td>
        <td><form:input path="email"/></td>
    </tr>           
</table>
<input type="submit" value="Save" />

非常感谢你帮助我。

4

2 回答 2

3

简单地将多个对象传递给视图不是问题——只需model.addAttribute多次使用,然后您就可以访问这两个对象。

但是,如果要在其中编辑多个模型,则<form:form>需要创建一个包含两个对象的类:

public class UserDomainSecurity {

    private UserDomain userDomain;
    private UserSecurity userSecurity;

    // getters and setters for both

}

然后将 this 的一个实例传递给视图:

 model.addAttribute("userDomainSecurity", new UserDomainSecurity());

并以下列形式使用它:

<form:form commandName="userDomainSecurity" method="POST" action="${saveUrl}">
...
  <form:input path="userDomain.firstName"/>
  ....
  <form:input path="userSecurity.someSecurityProperty"/>

有时不得不创建所有这些额外的类很烦人,但这有点合乎逻辑。包装类在表单中创建一种命名空间,从而分隔您要编辑的各个对象。

于 2012-05-27T07:06:26.510 回答
0

我想补充一下,因为这确实是我几分钟前遇到的当前问题。

在这种情况下,我假设你是UserSecurity并且UserDomain是相对的。

假设你有,

public class UserDomain {

     public UserSecurity userSecurity
     public String firstName;
     public String lastName;

     // getters and setters...
}

你有你的 UserSecurity 之类的东西,

public class UserSecurity {

     public String someSecurityProperty;

     // getters and setters...
}

由于userSecurity可以公开访问属性,因此您可以执行您在 Controller 中所做的操作,

@RequestMapping(value = "/persons/add", method = RequestMethod.GET)
public String getAdd(Model model) {
logger.debug("Received request to show add page");

// Create new UserDomain and add to model
// This is the formBackingOBject
model.addAttribute("userDomainSecurity", new UserDomain());

// This will resolve to /WEB-INF/jsp/addpage.jsp
return "addpage-tiles";
}

然后只需在您的 addpage.jsp 中访问它,就像它是下面的对象属性一样,

<form:form commandName="userDomainSecurity" method="POST" action="${saveUrl}">
...
<form:input path="firstName />
<form:input path="lastname />
  ....
  <form:input path="userSecurity.someSecurityProperty"/>

如您所见,我通过类中声明的属性访问 someSecurityProperty UserDomain

于 2013-01-22T18:53:52.637 回答