ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Javaの画面表示-その6:Struts(その5:Actionをつくる)。

2006-12-30 21:13:59 | JavaとWeb

シリーズJavaの画面表示のつづきです。今、Strutsを具体的な例をあげてやってます。手順は、以下のとおりです。

1.画面遷移を考える。
2.(別にやんなくてもいいけど)それを以下のように図にしておくと、あとで楽です
3.画面のJSPを作成します
4.Strutsタグをいれて、JSPを修正します
5.画面に対応するActionFormを作ります
6.Submitでサーバーで処理するところに対応する、Actionを作ります
7.struts-config.xmlを設定します
8.モデルを作って、Actionから呼び出します

 前回5まできたので、今回は「Submitでサーバーで処理するところに対応する、Actionを作ります」です。




■Actionでやること

 まず、Actionでやることですが、これは、以下のことです。
・入力データを取得する
・モデルとなるメソッドを呼び出す
・次画面のデータをセットしてフォワードする

以下、その方法を書きます。

●入力データを取得する
 まず、入力データがあるということは、入力してもらった画面があるはずで、
 その画面は、前回のActionForm作成により、ActionFormを継承したクラスができているはずです。
 で、そのクラスをキャストして、画面のクラスを取得します。
	inputForm inputform	=	(inputForm)form;


 そしたら、モデルで使う値を取得します。
 ActionFormを作ったときに、getterをつくってるはずなので、それを使いましょう。
   String nyuryoku = inputform.getNyuryoku();


●モデルとなるメソッドを呼び出す
 これは、普通に呼び出して、返り値を取得します。
		//	モデル呼び出し
		Shori1 shori1 = new Shori1();
		String kekka = shori1.rituKeisan(nyuryoku);


●次画面のデータをセットしてフォワードする
 モデルの値に応じて、次画面を書き出すわけですが、それには、

・まず、次画面のActionFormを生成して
 (次画面が、入力画面と同じActionFormなら、生成しないで、それを使いまわしてOKです)
		kekkaForm kekkaform = new kekkaForm();


・値を設定して(setterを使いましょう)
		kekkaform.setRitu(kekka);


・それをsetAtributeします
 このとき、Atributeの名前は、bean:writeタグ等のnameになります。
		request.setAttribute("kekkaForm",kekkaform);


・そしたら、フォワードします
 といっても、いままでみたいに、
getServletContext().getRequestDispatcher("/jsp/index.jsp").forward(request,response);
とやるのではなくて!!以下のように書きます。
		return map.findForward("success");


ここで、successとか名前をおくっていますが、この名前は、前に書いた図のところに描いたものです(図を描いていないなら適当に決めてください)。

 この名前と、呼び出すファイルの関係は、後の工程である「7.struts-config.xmlを設定します」で行います。

●クラスとメソッドについて
クラスは、以下のものをインポートし

import javax.servlet.http.*;
import org.apache.struts.action.*;

以下のような感じで、executeメソッドをつくって、その中に、上記のものを書きます。
package	pac1;

import javax.servlet.http.*;
import org.apache.struts.action.*;

public final class ShoriCtrl extends Action {

	public ActionForward execute
		(ActionMapping map, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
	{

		//	ここに上記処理を書く
	}
}





●具体例
 ここまでをまとめて、今回の具体例に沿って書くと、こんなかんじになります。
package	pac1;

import javax.servlet.http.*;
import org.apache.struts.action.*;

public final class ShoriCtrl extends Action {

	public ActionForward execute
		(ActionMapping map, ActionForm form,
				HttpServletRequest request, HttpServletResponse response)
	{

		//	データの入力
		inputForm inputform	=	(inputForm)form;
		String nyuryoku = inputform.getNyuryoku();
		
		//	モデル呼び出し
		Shori1 shori1 = new Shori1();
		String kekka = shori1.rituKeisan(nyuryoku);

		//	エラー時の出力
		if ( kekka	==	null )
		{
			errorForm errorform	=	new errorForm();
			errorform.setMsg("NO DATA!");
			request.setAttribute("errorForm",errorform);
			return map.findForward("error");
		}
		else if ( kekka.equals("NO DATA!")	==	true)
		{
			errorForm errorform	=	new errorForm();
			errorform.setMsg("NO DATA!");
			request.setAttribute("errorForm",errorform);
			return map.findForward("error");
		}

		//	正常時の処理
		kekkaForm kekkaform = new kekkaForm();
		kekkaform.setRitu(kekka);
		request.setAttribute("kekkaForm",kekkaform);
		return map.findForward("success");
	}
}





■注意点その他

●Action入力画面について
 今回のActionは、error.jsp,input.jsp2つの画面から入力されていますが、どちらも、inputFormクラスを使って、入力データを処理しています。
 このように、入力のActionFormは1つですので、いくつかの画面から入力して、同じActionに行く場合、どの画面も同じActionFormが使えるように、入出力項目は、同じ名前にしないとまずいです。
(input.jspで文字入力のところのプロパティをnyuryokuにしてるのに、error.jspでinputDataにするのは、まずい)

●モデルができるまえに
 ActionFormは、画面が決まれば自動的に作れますし、Actionも、上記のように遷移が決まれば、モデル呼び出し以外はつくれます。
 そこで、モデルを呼び出さないで、(モデル部分のダミーモジュールを作ってもOK!)とりあえず作ってしまい、画面だけは確認するっていうのもありというか、テストファーストなら、そうすべきなのかな。。




 ということで、Actionまで終わったので、
 このシリーズの次回は、「7.struts-config.xmlを設定します」です。



この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ケータイOSとキャリア、メ... | トップ | 安倍首相夫人のアッキーブロ... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事