- 締切済み
strutsのactionタグinput
strutsのvalidatorを使用するため 「struts-config」のactionタグに以下の修正を入れると思います。 ・validate = true ・input = "エラー時に遷移するページ" 上記の修正後、実行すると 画面の初期表示時に、どうやらinputで指定した画面に遷移してしまいます。 エラー時に遷移するための指定かと思ったのですが 画面初期表示時にも読み込まれるのでしょうか? 画面表示で分割して表示している所為でしょうか? ・validatorでのエラーはポップアップで表示したいと思っています。 ・該当する1画面表示に対しての配置は以下になります。 (1)Menue.html -(2)Top.jsp※共通なヘッダ部分 -(3)Main.html -(4)Init.jsp※検索結果表示部分 -(5)Search.html -(6)Search_Up.html※上部の表示部分 -(7)Sarch_In.jsp※検索条件入力部分 ※初期表示は(1)の画面で、validatorを使用するのは(7)の画面です。 (7)の画面には以下を追加しました。 追加⇒<html:javascript formName="対象Form名"/> <html:form action="actionのpath名.do? action=search" method="post" target="view" 追加⇒onsubmit="return validate対象Form名(this)"> 1つの画面に対して細かく資産を分けてしまうと validatorを利用する際にうまく画面遷移が出来ないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- co_maam
- ベストアンサー率65% (13/20)
> <html:link page="/search.do&action=init" ・・・・> このURLの指定方法はどこから得た知識でしょうか? 一般的なStrutsの使い方をしていないような気がします。 特に、"&"は何を表しているのでしょうか。 現在の記述を見ると、バリデーション機能を利用しようとしていますが、 バリデーション機能を除いて正しくStrutsは利用できているのでしょうか。 もしStrutsを正しく利用できていないのであれば、 単なる1遷移を実装するなどして正しい利用方法を理解した上で、 バリデーションの機能を利用するなどしたほうが良いかもしれません。
- co_maam
- ベストアンサー率65% (13/20)
まず何よりも先にstruts-config.xmlの内容を提示してください。 質問内容から、少なくとも初期表示Actionと検索ボタン押下Actionの記述は必要かと。
補足
失礼しました。 struts-configのaction定義は以下になります。 初期表示と検索部分をコメントしています。 他も色々と細かい遷移先がありますが 正常ルートではない遷移なのでここでは説明を割愛させていただきます。 <action path="/search" type="com.aa.AA.searchAction" name="searchForm" validate="true" input="/JSP/AA/Search_In.jsp"> <!--初期表示--><forward name="init" path="JSP/AA/Menu.html"/> <forward name="over_init" path="JSP/AA/Init.jsp"/> <!--検索--><forward name="search" path="JSP/AA/Search_Res.jsp"/> <forward name="refresh" path="JSP/AA/Search_Res.jsp"/> <forward name="search_over" path="JSP/AA/Search_Res.jsp"/> <forward name="search_over_refresh" path="JSP/AA/Search_Res.jsp"/> <!-- 以下、異状系のエラー --> <forward name="error_search" path="JSP/CW/Error.jsp"/> <forward name="error_refresh" path="JSP/CW/Error.jsp"/> <forward name="error_download" path="JSP/CW/Error.jsp"/> </action> ひとつ画面を記述し忘れていました。 (8)検索結果表示※Search_Res.jsp (4)の画面は初期表示時のみになります。 メニュー画面(他の画面)からこの画面のActionのinitが呼ばれるはずなのですが <html:link page="/search.do&action=init" ・・・・> initのログは出力されていませんでした・・・ initが呼ばれずにいきなりinputで指定した画面が表示されているっぽいです。
補足
&はリクエストとして渡している値です。 既に完成されているプロジェクトに対し 今回リファクタリングを行なうのですが 独自に作りこまれている為、strutsの使い方としては 生かしきれてない作りになっています。 今回の件については解決いたしました。 ⇒バリデーション機能について、呼ばれるタイミングが 画面に追加したonsubmitのタイミングだと思い込んでいました。 しかし、バリデーション機能を設定したActionが起動されたときに 実行されるので、今回は画面開設時の初期処理の前で呼ばれ エラーを返却しているため、本来の画面が開設される前にエラー画面に 遷移していました。 1画面につき1Actionのつくりをしているため 問題を解決するにはstruts-configでActionを別名定義し バリデーションを起動したくない処理はvalidate=falseと 設定すれば実現可能かと思います。 しかし、検討の結果とスケジュールの都合上 今回バリデーションを利用することはあきらめました・・・ 今後もリファクタリングを行う予定なので その時に再検討したいと思っています。