ドメインモデルとドライバモデル


1.ドメインモデル
レルムのエンティティを1つのエンティティオブジェクトに直接カプセル化します.たとえば、ユーザーの情報データをデータベースに保存するには、複数のプロパティを渡す必要がなく、1つのエンティティオブジェクト(Userオブジェクト)を渡すだけです.
action:
package com.kexin.action;

import com.kexin.bean.User;


public class DomainAction {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
    public String execute(){
        System.out.println(user.getName()+":"+user.getId());
        return "success";
    }
}

        <action name="domainAction" class="com.kexin.action.DomainAction">
            <result>/first.jspresult>
        action>

データエコー(nameプロパティ値に注意):
<h3>     h3>
    <div>
        <s:form action="domainAction.do" method="post">
            <input type="text" name="user.name"/><br/>
            <input type="text" name="user.id"/><br/>
            <input type="submit">
        s:form>
    div>
    <div>
        your name is <s:property value="user.name"/><br/>
        your id is <s:property value="user.id"/>
    div>

2.駆動モデル
DomainModelでは、要求パラメータに対応するエンティティオブジェクトを指定する必要があるため、Struts 2にはModelDrivenインタフェースが用意されています.
Action(userをインスタンス化する必要があることに注意):
package com.kexin.action;

import com.kexin.bean.User;
import com.opensymphony.xwork2.ModelDriven;

public class DrivenAction implements ModelDriven<User> {
    private User user = new User();
    public String execute(){
        System.out.println(user.getName()+":"+user.getId());
        return "success";
    }
    @Override
    public User getModel() {
        // TODO Auto-generated method stub
        return this.user;
    }

}

        <action name="drivenAction" class="com.kexin.action.DrivenAction">
            <result>/first.jspresult>
        action>

データエコー:
<h3>      h3>
    <div>
        <s:form action="drivenAction.do" method="post">
            <input type="text" name="name"/><br/>
            <input type="text" name="id"/><br/>
            <input type="submit">
        s:form>
    div>
    <div>
        your name is <s:property value="name"/><br/>
        your id is <s:property value="id"/>
    div>