1

タイルでStruts 2を使用すると、この例外が発生します

org.apache.tiles.definition.NoSuchDefinitionException: /index.jsp

//タイル.xml

<tiles-definitions>
<definition name="baseLayout" template="/index.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>
<tiles-definitions>

//index.jsp

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<tiles:insertAttribute name="header"/>
<tiles:insertAttribute name="footer"/>   
</body>
</html>

//web.xml

<listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.  
DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>

//struts.xml

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

    <action name="login" class="com.medics.action.LoginAction">
        <result name="SUCCESS" type="tiles">/index.jsp</result>
    </action>
    </package> 

私はたくさん検索しましたが、何も見つかりませんでした

4

2 に答える 2

3
org.apache.tiles.definition.NoSuchDefinitionException: /index.jsp

タイルの定義がないこと、つまり「/index.jsp」という名前の定義がないことを意味します

支柱とタイルを使用する場合...リクエストは支柱に入り、タイルがビューを構成するタイルに送信されるため、「anything.jsp」と呼ばれるタイル定義はありません。

だから交換するだけ

<result name="SUCCESS" type="tiles">/index.jsp</result>

<result name="SUCCESS" type="tiles">baseLayout/result>

これで解決しました...index.jsp、template.jspの名前を変更します(混乱が少ないと思います)。なぜ「/ Template」というput属性があるのですか?

この問題を修正するために、struts2の結果ターゲットを「baseLayout」に変更することをお勧めしますが、これはおそらくあなたの意図ではないので、新しいページにbaseLayout定義を使用したいので、新しい定義を追加します。

<definition name="index" extends="baseLayout">
  <put-attribute name="title" value="My Title for Index" />
  <put-attribute name="body" value="/index.jsp" />
</definition>

これで、上記はdefaultTemplateでその値を取得し、index.jspのページを作成するベーステンプレートにあったものを追加(または名前が同じ場合はオーバーライド)します。これで、struts.xmlに次のようになります。

 <result name="SUCCESS" type="tiles">index</result>
于 2011-01-23T00:48:35.577 に答える