0

Struts2とTiles2を統合する非常に優れた例をオンラインで見つけました。それらすべてが、単一のアクションクラスのワイルドカードメソッドを使用してアクションをマップしていることに気付きました。そうする理由はありますか?アクションを個別に複数のクラスにマップすると、アプリケーションが機能しません。以下のコードでは、lookUpAllアクションが私によって追加されました。残りのコードは、私が従おうとしている例からのものです。

Struts.xml:

<struts>
<package name="default" extends="struts-default">
    <result-types>
        <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
    </result-types>

    <action name="*Link" method="{1}" class="action.LinkAction">
        <result name="welcome" type="tiles">welcome</result>
        <result name="friends" type="tiles">view</result>
        <result name="office" type="tiles">office</result>
    </action>

    <action name="lookUpAll" class="action.LookupAll">
        <result name="success" type="tiles">view</result>
        <result name="error" type="tiles">lookFail</result>
    </action>
</package>
</struts>

Tiles.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>

  <definition name="baseLayout" template="/baseLayout.jsp">
      <put-attribute name="title"  value="Template"/>
      <put-attribute name="header" value="/header.jsp"/>
      <put-attribute name="menu"   value="/menu.jsp"/>
      <put-attribute name="body"   value="/body.jsp"/>
      <put-attribute name="footer"   value="/footer.jsp"/>
  </definition>

  <definition name="welcome" extends="baseLayout">
      <put-attribute name="title"  value="Welcome"/>
      <put-attribute name="body"   value="/welcome.jsp"/>      
  </definition>

  <definition name="view" extends="baseLayout">
      <put-attribute name="title"  value="View"/>
      <put-attribute name="body"   value="/DispSchedule.jsp"/>      
  </definition>

  <definition name="lookFail" extends="baseLayout">
      <put-attribute name="title"  value="LookFail"/>
      <put-attribute name="body"   value="/lookUpFail.jsp"/>      
  </definition>

  <definition name="friends" extends="baseLayout">
      <put-attribute name="title"  value="Friends"/>
      <put-attribute name="body"   value="/friends.jsp"/>      
  </definition>

  <definition name="office" extends="baseLayout">
      <put-attribute name="title"  value="Office"/>
      <put-attribute name="body"   value="/office.jsp"/>      
  </definition>

</tiles-definitions>
4

1 に答える 1

1

ワイルドカードの使用は必須ではありませんが、アプリが単一(または複数)のアクション、複数のメソッドを使用して緊密に結合された機能を処理する場合に便利です。

特に小さなアプリやデモの場合、XML構成を最小限に抑える方法です。

最近では、ほとんどのXML構成を削除し、アノテーションを使用してアクション/メソッドを個別に構成するのが一般的かもしれません。


真新しい質問を反映するように編集します。

問題を再現することはできません。menu.jspとheader.jspに1行あり、baseLayout.jspを削除した最小限のS2アプリを使用すると、次のようになります。

ここに画像の説明を入力してください

于 2013-01-15T20:03:20.520 に答える