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";
}

私の問題は、モデルに2つの異なるオブジェクトを追加するために渡したいということです。たとえば、「new UserDomain()」と、データベース内の他のテーブルにある他のオブジェクトを渡したいと思います。 '新しいUserSecurity()'。「model.addAttribute...」の代わりに「modelMap」を使用する必要があると思いますが、これはできないので、誰かが私を助けてくれるなら。次のようなコードで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

}

次に、このインスタンスをビューに渡します。

 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、コントローラーで行ったことを実行できます。

@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 に答える