- PR -

strutsのForwardActionによるページ遷移

投稿者投稿内容
どら吉
常連さん
会議室デビュー日: 2003/08/29
投稿数: 21
お住まい・勤務地: 福岡
投稿日時: 2004-03-24 15:11
こんにちは。
現在Actionクラス、Formクラスを作らず、struts-config.xmlにForwardActionを
記述することによってページ遷移を実現したいと思っていろいろやっているんですが、
実現できなくて困っています。

簡単なサンプルとして、
<Page1.jsp>(submitボタンが一個あるだけのjspファイル)
コード:

<%@ page contentType="text/html; charset=Windows-31J" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:html>
<body>
this is page 1.
<html:form action="/testAct">
<html:submit value="submit" />
</html:form>
</body>
</html:html>


<Page2.jsp>(無事ページの遷移ができたということを見るためだけのjsp)
コード:

<%@ page contentType="text/html; charset=Windows-31J" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<html:html>
<body>
this is page 2.
</body>
</html:html>


をつくり、struts-configに
コード:

<action path="/testAct"
type = "org.apache.struts.actions.ForwardAction" 
parameter = "/Page2.jsp" />


を追加してPage1.jspを呼び出したところ、

org.apache.jasper.JasperException: Cannot retrieve definition for form bean null

というエラーになります。

おそらくactionにname属性を追加してやればいいのだろうとは思うのですが、
それだと無駄なformクラスを作ることになるので、避けたいと思っています。
皆様のお知恵を貸してください。

#すみません、jspの記述に誤りがあったので修正しました。

[ メッセージ編集済み 編集者: どら吉 編集日時 2004-03-24 15:16 ]
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-03-24 15:31
引用:

どら吉さんの書き込み (2004-03-24 15:11) より:
こんにちは。
現在Actionクラス、Formクラスを作らず、struts-config.xmlにForwardActionを
記述することによってページ遷移を実現したいと思っていろいろやっているんですが、
実現できなくて困っています。



そんなあなたに org.apache.struts.action.DynaActionForm
どら吉
常連さん
会議室デビュー日: 2003/08/29
投稿数: 21
お住まい・勤務地: 福岡
投稿日時: 2004-03-24 20:46
ふーばーさん>
ありがとうございます。
ということは、やっぱりactionにname属性は持たせる必要があるということなんでしょうか・・・。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6447&forum=12&start=0

こちらのスレッドで、name属性を指定せずにページの遷移ができていたようなので、
何かこちらの状況に間違いがあるのだろうと思っていたのですが・・・。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-03-24 21:24
引用:

ということは、やっぱりactionにname属性は持たせる必要があるということなんでしょうか・・・。



ActionFormは不要です。strutsのサンプルであるstruts-blankのstruts-config.xml
ファイルでも見てみてください。ForwardAction.javaのソースコードもシンプルな
もんです。興味がわけば見てみるとよいと思います。

引用:

を追加してPage1.jspを呼び出したところ、


ということは、submitボタンを押すことすらできないってことですから、
ForwardActionを使う使わない以前の問題ですね。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-03-25 10:33
引用:

aaさんの書き込み (2004-03-24 21:24) より:
引用:

ということは、やっぱりactionにname属性は持たせる必要があるということなんでしょうか・・・。



ActionFormは不要です。strutsのサンプルであるstruts-blankのstruts-config.xml
ファイルでも見てみてください。ForwardAction.javaのソースコードもシンプルな
もんです。興味がわけば見てみるとよいと思います。



<html:form> タグを使う場合は、ActionForm (name 属性)は必須では?

どら吉さんは
・<html:form> を使うJSPを作るんだけど ActionForm クラスを作りたくない。
・ForwardAction を使って画面遷移がしたい。
どっちをしたいんですか?
どら吉
常連さん
会議室デビュー日: 2003/08/29
投稿数: 21
お住まい・勤務地: 福岡
投稿日時: 2004-03-25 11:13
ふーばーさん>
引用:

<html:form> タグを使う場合は、ActionForm (name 属性)は必須では?


そ、そうなのですか・・・?

やりたいことは「Page1.jspからsubmitボタンでPage2.jspに移動」
「移動先はPage1.jspに指定ではなく、struts-configに記述する」の2点です。
submitボタンを使うためにはformタグでネストする必要があるはずですが、
formには何の入出力もないので、ActionFormの拡張クラスは作りたくないのですが、
そこがそもそもの認識間違いなのでしょうか?

aaさん>
引用:

strutsのサンプルであるstruts-blankのstruts-config.xml
ファイルでも見てみてください。


サンプルとにらめっこしてみたのですが、今回やりたいことは
formタグからstruts-configに記述してあるactionを呼び出すことなので、
サンプルとは少しちがうようです。(サンプルはjsp内redirect->struts-config内forward
->struts-config内action という風に呼んであるので)
助言ありがとうございました。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-03-25 11:31
引用:

どら吉さんの書き込み (2004-03-25 11:13) より:
ふーばーさん>
引用:

<html:form> タグを使う場合は、ActionForm (name 属性)は必須では?


そ、そうなのですか・・・?

やりたいことは「Page1.jspからsubmitボタンでPage2.jspに移動」
「移動先はPage1.jspに指定ではなく、struts-configに記述する」の2点です。
submitボタンを使うためにはformタグでネストする必要があるはずですが、
formには何の入出力もないので、ActionFormの拡張クラスは作りたくないのですが、
そこがそもそもの認識間違いなのでしょうか?



えーっとですね、「そもそも」の話をすると、入力(POSTデータ)がないのに
<form> を使う(submit を使う) というのがおかしいんです。リンク(<a>)で
もいいでしょ?そうなると、FowardAction 云々という話になるんですよ。

で、どうしても submit でやりたい場合は、struts-config.xml に name 属性で
ActionForm を指定しなければいけないんですが、必ずしもクラスを作る必要はなく、
DynaActionForm を使っても構いません。(これが私の書き込みの真意)

引用:

移動先はPage1.jspに指定ではなく、struts-configに記述する



これだけ見ると、<html:link> で global-forward を指定するのが一番すっきり
実現できると思うんですけどね。
タモリのファン
会議室デビュー日: 2004/02/07
投稿数: 7
投稿日時: 2004-03-25 11:44
submitだとエンターキーでも反応するからじゃないですかね。
私だったら、global-forward書いて、tagLib使わないで
Formタグを自分で書きますね。

スキルアップ/キャリアアップ(JOB@IT)