ラベル struts の投稿を表示しています。 すべての投稿を表示
ラベル struts の投稿を表示しています。 すべての投稿を表示

tilesが動かない!springを使う場合は、tiles用のRequestプロセッサを指定してね。

以下の環境で、strutsのtilesをしようしようとしたら503エラーが。。

struts 1.3.10
spring 2.5

なんでかって。。それは、struts-configで宣言しているcontrollerタグで指定するクラスが間違ってたからでした。

↓の用に設定していましたが、DelegatingRequestProcessorではなDelegatingTilesRequestProcessorでした。。

ダメ

<controller>
<set-property property="processorClass"
value="org.springframework.web.struts.DelegatingRequestProcessor"/>
</controller>


正解

<controller>
<set-property property="processorClass"
value="org.springframework.web.struts.DelegatingTilesRequestProcessor"/>
</controller>

これに数時間はまってましたorz..

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

tiles:getAsString で取得した値をbean:message のkey属性に値を設定する

tiles.xmlでputタグに設定したvalueの値を、JSP側のbean:messageタグのkey属性に設定しようとしたらはまったので、メモします。

前提

tiles.xml
 ↓の用に定義しています。

<definition name="baseLayout" path="/WEB-INF/jsp/shared/baseLayout.jsp">
<put name="screenId" value="A001"/>
</definition>

bean:messageで取得するリソースファイル
リソースファイルの内容を↓の用に設定して、struts-configにリソースファイルとして定義しておきます。

    A001=A画面

baseLayout.jspでは、tiles.xmlで指定したscreenIdを取得し、リソースファイルに設定した"A画面"という文字をbean:messageタグを使って取得しようとしたとします。

問題

↓の様に書いてもだめでした。。。まぁ当然ですよね。

<bean:message key="<tiles:getAsString name="screenId"/>" />

対策 
bean:defineを使って一旦変数にとり、その後EL式を使って取得するようにしました。

<bean:define id="screenId"><tiles:getAsString name="screenId"/></bean:define>
<bean:message key="${screenId}" />
これで何とかリソースファイルから値を取得することが出来ました。

欠点 

この方法だとtiles.xmlでscreenIdがputタグで定義されていない場合、bean:defineにnullを設定しようとするため、エラーとなってしまいます。。。orz..

欠点を克服できる方法がありましたら、教えていただけるとありがたいです。

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS