Maya + Webwork

フォームから値を受け取って表示するサンプルを作ってみました。
長いです。

  • input.html
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
</head>
<body>
<h3>Maya + Webwork</h3>
入力
<form id="form" action="confirm.html">
    <table border="0" cellspacing="0">
        <tr>
            <td>名前</td><td><input type="text" id="form_name"></td>
        </tr>
        <tr>
            <td>パスワード</td><td><input type="password" id="form_password"></td>
        </tr>
        <tr><td colspan="2"><input type="submit" value=" 確認 " id="form_submit"></td></tr>
    </table>
</form>

</body>
</html>

データを入力するためのページです。
特に変わったことはしてません。

  • input.maya
< ?xml version="1.0" encoding="Shift_JIS"?>
<maya>

	<tag id="form" inject="ww:form">
		<binding name="action" value="'ConfirmAction'"/>
		<binding name="method" value="'POST'"/>
	</tag>
	
	<tag id="form_name" inject="ww:textfield">
		<binding name="name" value="'name'"/>
		<binding name="value" value="'${ action.model.name }'"/>
	</tag>
	
	<tag id="form_password" inject="ww:password">
		<binding name="name" value="'password'"/>
		<binding name="value" value="'${ action.model.password }'"/>
	</tag>
	
	<tag id="form_submit" inject="ww:submit">
		<binding name="value" value="' 確認 '"/>
	</tag>

</maya>
  • confirm.html
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
</head>
<body>
<h3>Maya + Webwork</h3>
入力確認
<span id="action"/>
<form id="form" action="done.html">
<table border="0" cellspacing="0">
        <tr>
            <td>名前</td><td><span id="name">ここに名前</span></td>
        </tr>
        <tr>
            <td>パスワード</td><td><span id="password">ここにパスワード</span></td>
        </tr>
        <tr><td><input type="submit" value=" 登録 " id="form_submit"></td><td><input type="button" value=" 戻る " onclick="history.back();"></td></tr>
    </table>
</form>
ELResolver
<table border="0" cellspacing="0">
<tr>
    <td>名前</td><td><span id="el_name">ここに名前</span></td>
</tr>
<tr>
    <td>パスワード</td><td><span id="el_password">ここにパスワード</span></td>
</tr>
</table>
</body>
</html>

input.htmlで入力されたデータを表示します。

  • confirm.maya
< ?xml version="1.0" encoding="Shift_JIS"?>
<maya>

	<tag id="form" inject="ww:form">
		<binding name="action" value="'DoneAction'"/>
		<binding name="method" value="'POST'"/>
	</tag>
	
	<tag id="action" inject="ww:action">
		<binding name="name" value="'ConfirmAction'"/>
		<binding name="id" value="action"/>
	</tag>
	
	<tag id="name" inject="ww:property">
		<binding name="value" value="#action.model.name"/>
	</tag>
	<tag id="password" inject="ww:property">
		<binding name="value" value="#action.model.password"/>
	</tag>
	
	<tag id="el_name" inject="c:out">
		<binding name="value" value="${ action.model.name }"/>
	</tag>

	<tag id="el_password" inject="c:out">
		<binding name="value" value="${ action.model.password }"/>
	</tag>
		
	<tag id="form_submit" inject="ww:submit">
		<binding name="value" value="' 登録 '"/>
	</tag>
	
</maya>
  • done.html
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
</head>
<body>
<h3>Maya + Webwork</h3>
登録完了
</body>
</html>


package webwork.action;

import webwork.model.UserInfo;

import com.opensymphony.xwork.ActionSupport;
import com.opensymphony.xwork.ModelDriven;

/**
* @author wada
*
*/
public class MayaAction extends ActionSupport implements ModelDriven{

private UserInfo model = new UserInfo();

public Object getModel() {
return model;
}

public String confirm(){
return SUCCESS;
}

public String done(){
return SUCCESS;
}

public String regist(){
return SUCCESS;
}

public String change(){
model.setName("変更");
model.setPassword("password");
return SUCCESS;
}

}

Actionクラスです。


package webwork.model;

import java.io.Serializable;

/**
* @author wada
*
*/
public class UserInfo implements Serializable {

private String name;

private String password;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}

ModelDrivenで使用するモデルです。


< ?xml version="1.0" encoding="ISO-8859-1"?>







/webwork/confirm.html


/webwork/done.html



/webwork/input.html



/webwork/input.html




webworkの設定ファイルです。

  • default.maya


< ?xml version="1.0" encoding="Shift_JIS"?>








webworkのtaglibが使えるように定義しています。


ActionはModelDrivenで作成しました。
Webworkを知らない人のためにちょっとだけ説明を。
WebworkではActionクラスのフィールドでフォームから値を受け取ることができます。この場合フィールド名とフォーム名が一致している必要があります。
これを単にPOJOで受けるようにしたのがModelDrivenです。DTOでそのまま受け取ると思ってもらって結構です。


各フォームのパーツはwebworkのtaglibを使用して表示しています。
confirm.htmlではinput.htmlで入力されたデータを表示します。
ここで二通りの表示を行っています。
まずwebworkのtaglibを使った表示方法。













パラメータを渡すところでシングルクォーテーションを用いているものはそのまま文字列として渡すことを意味しています。これはwebworkの流儀です。
ww:actionというタグを用いるためにダミーのspanタグを入れています。
後はwebworkのtaglibの定義に従ってバインドしています。


次にELResolverを使った方法。







独自にELResolverを作成して、actionという変数に対してWebworkのActionを参照するようにしています。
ここでのactionはMayaActionということになります。そこからフィールドの値を取得してバインドしています。
独自に作成したELResolverは良く理解して作ってないのでまだソースをお見せすることはできません。
一応動いたという感じです。



とりあえずMayaとWebworkが連携できるのを確認できました。
ある程度納得のできるサンプルができたらコードをUPしたいと思います。


単なる説明書きですみません・・・・