FORMの機能をActionだけで実現する


お勧めではないが、Formを使わずにActionにFormの機能を埋め込んで新しいアクションの追加の「exsamole1」と同じ機能を実現させる事もできる。
ActionFornクラスが無くても動作できる事を覚えておいた方が良いだろう。

入力ページの作成

入力ページsrc/main/webapp/WEB-INF/view/exsample1/index.jspをsrc/main/webapp/WEB-INF/view/exsample2にコピーして、ファイル内の「exsample1」の文字を「exsample2」に修正する。

Actionの作成

mySAStruts.form.Exsample2Actionクラスを作成。
インスタンス変数を追加する。

package mySAStruts.action;

import org.seasar.struts.annotation.Execute;

public class Exsample2Action {

	public String name;
	public String departmentName;
	public String salary;

	@Execute(validator = false)
	public String index() {
		return "index.jsp";
	}

	@Execute(validator = false)
	public String result() {
		return "result.jsp";
	}
}

結果出力ページを作成

結果出力ページsrc/main/webapp/WEB-INF/view/exsample2/result.jspを、src/main/webapp/WEB-INF/view/exsample2にコピーして、ファイル内の「exsample1」の文字を「exsample2」に修正する。

動作確認

tomcatを起動し、入力画面を表示させてみると新しいアクションの追加と同じ結果が表示される。

解説

Actionクラスのpublic に宣言されてインスタンス変数は、SAStrutsによりJSPページの同名のFORM変数(Strutsのhtmlタグのproperty属性で指定)で入力した値が代入される。
またresult.jspでは、requpest.getAttrebute(変数名)でこの値を受け取る事ができる事を示している。

試しに、Actiomクラスのresultメソッドとresult.jspを下記のように修正し、結果を見てみるとその事が確認できる。

Exsample2Action.javaを修正
 

    @Resource
    protected HttpServletRequest request;

	@Execute(validator = false)
	public String result() {
		System.out.println("name1="+name);	// name変数に値が代入されている。
		name=name+"aaaa";			// name変数の値を変更
		System.out.println("name2="+request.getParameter("name"));
							// リクエストParameterのname変数の値を表示
		System.out.println("name3="+request.getAttribute("name"));
							// getAttributeにはまだ値が代入されていない。
		return "result.jsp";
	}

result.jspを修正

	<tr>
		<td>名前</td><td><%= request.getAttribute("name") %></td>
	</tr>

 

ページのトップへ戻る