2011-06-29 1 views
2

Tilesドキュメントを参照してください。 ワイルドカードを定義して任意の名前を受け入れることができます。しかし、名前に "/"が含まれていると、例えば "c4/login"のようになります。タイルはなぜTilesワイルドカード定義名はスラッシュ(/)文字を受け入れることができなかったのですか

org.apache.tiles.definition.NoSuchDefinitionException: c4/login 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:625) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:321) 

例外がスローされます私の定義は以下の通りです:

<definition name="*" template="/WEB-INF/tiles/basicLayout.jsp"> 
    <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" /> 
    <put-attribute name="content" value="/WEB-INF/pages/{1}.jsp" /> 
    <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" /> 
</definition> 

私は以下の例に定義を変更する場合は、内部のスラッシュと名前が受理されました。

<definition name="c4/login" template="/WEB-INF/tiles/basicLayout.jsp"> 
    <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" /> 
    <put-attribute name="content" value="/WEB-INF/pages/c4/login.jsp" /> 
    <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" /> 
</definition> 

お願いします。どうもありがとう。

答えて

1

私はこれがあなたのために有用である

<definition name="*/*" template="/WEB-INF/tiles/basicLayout.jsp"> 
    <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" /> 
    <put-attribute name="content" value="/WEB-INF/pages/{1}/{2}.jsp" /> 
    <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" /> 
</definition> 

希望の下に改訂された定義を使用し、回避策ソリューションを得ました。

2

私はより一般的な回避策を見つけたと思う:ワイルドカードとして**を使用します。完璧に動作

<definition name="**" template="/WEB-INF/tiles/basicLayout.jsp"> 
    <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" /> 
    <put-attribute name="content" value="/WEB-INF/pages/{1}.jsp" /> 
    <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" /> 
</definition> 
+0

!ありがとうございます –

+0

警告の単語: 'name =" ** "'は非常に貪欲なワイルドカードです。設定に応じて、[この質問+回答](http://stackoverflow.com/questions/6521609/why-tiles-regexp-wildcard-definition-cause-endless)に従って、無限ループを起こすのは非常に簡単です。 -jsp-includes-error/6617343)を入力します。 –

関連する問題