- PR -

Strutsモジュール分割時のinput属性(バリデーション)について

1
投稿者投稿内容
松川(日々精進)
会議室デビュー日: 2005/01/19
投稿数: 18
投稿日時: 2005-04-14 16:12
Strutsでモジュール分割を使用した際にバリデーションエラー
が発生した場合にフォーワードされるJSPファイルの指定方法について
質問します。
現在モジュール分割を使用し、以下の構成でシステムを作っています。

コード:

◆環境
Tomcat4.1.30
Struts1.2.4

◆ディレクトリ構成
/WEB-INF
|-view
|-entry.jsp
|-entryComplete.jsp

◆web.xmlのActionサーブレット設定
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/edit</param-name>
<param-value>/WEB-INF/struts-edit-config.xml</param-value>
</init-param>

◆struts-edit-config.xml内のアクションマッピング
<action path="/entry"
type="sample.EntryAction"
name="EntryForm"
validate="true"
scope="request"
input="/WEB-INF/view/entry.jsp">
<forward name="fail" path="/WEB-INF/view/entry.jsp" contextRelative="true"/>
<forward name="success" path="/WEB-INF/view/entryComplete.jsp" contextRelative="true"/>
</action>




この状態で/edit/entry.doにパラメータを送信した際にバリデーションエラーが発生すると、
Tomcatからinput属性に指定した/edit/WEB-INF/view/entry.jspは存在しないという404
エラーメッセージが出力されてしまいます。バリデーションエラーが発生しないときは、
問題無く指定したJSPが表示されるのですが、actionタグの属性などでeditコンテキスト
を付けないようにする方法が見当たらず困っています。
WEB-INFディレクトリ内にJSPなどのファイルを配置することに疑問を感じる方もいらっしゃ
ると思いますが、Tomcat(その他APサーバも)のセキュリティ設定に左右されず、外部から
直接JSPにアクセスされない構成をとりたい為こうしています。
システム作成を先に進めるため、現在は以下のような構成

コード:

/edit
|-entry.jsp
|-entryComplete.jsp

<action path="/entry"
type="sample.EntryAction"
name="EntryForm"
validate="true"
scope="request"
input="/entry.jsp">
<forward name="fail" path="/entry.jsp" contextRelative="false"/>
<forward name="success" path="/entryComplete.jsp" contextRelative="false"/>
</action>




対処していますが、前記したような理由があるのでなるべくWEB-INF内にファイルを置きたい
と思います。どなたかこのあたりの対処法をご存知の方はいらっしゃいませんでしょうか。
よろしくお願いします。


[ メッセージ編集済み 編集者: 松川(日々精進) 編集日時 2005-04-14 16:15 ]

暫定的な対応のディレクトリツリーを間違えてました。
/editの下にJSPファイルを置いています。


[ メッセージ編集済み 編集者: 松川(日々精進) 編集日時 2005-04-14 19:29 ]
松川(日々精進)
会議室デビュー日: 2005/01/19
投稿数: 18
投稿日時: 2005-04-14 20:28
自己レスですが、なんとか解決策を見つけたので報告します。
再表示したいJSP用のフォーワードアクションを作り、その
アクションのパスをinput属性に指定するという方法です。

コード:
<action path="/entry" 
  type="sample.EntryAction" 
  name="EntryForm" 
  validate="true" 
  scope="request" 
  input="/_entry_validation_error.do">
    <forward name="fail" path="/WEB-INF/view/entry.jsp" contextRelative="true"/>
    <forward name="success" path="/WEB-INF/view/entryComplete.jsp" contextRelative="true"/>
</action>

<action path="/_entry_validation_error" 
   type="org.apache.struts.actions.ForwardAction" 
   parameter="/WEB-INF/view/entry.jsp"/>




ちょっと一手間ですが無事動作しました。
他に方法をご存知の方からの書き込みお待ちしてます。




1

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