1

ネストされたテンプレートが親テンプレートの前に評価されるという問題があります。順序付けの問題により、ネストを要求するタグ ライブラリで問題が発生しています。

template.jsp

<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@taglib uri="http://taglibs.com/tags" prefix="s"%>
<%System.out.println("evaluating template.jsp");%>
<s:outer>
    <tiles:insertAttribute name="content" />
</s:outer>

content.jsp

<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@taglib uri="http://taglibs.com/tags" prefix="s"%>
<tiles:insertDefinition name="template">
    <tiles:putAttribute name="content" />
        <%System.out.println("evaluating content.jsp");%>
        <s:inner />
    </tiles:putAttribute>
</tiles:insertDefinition>

content.jspページが評価されると、次のように出力されます。

evaluating content.jsp
evaluating template.jsp

タグはタグ内にある必要があるため、content.jspページは失敗しています。評価後にタイルを評価するにはどうすればよいですか?inneroutercontent.jsptemplate.jsp

4

1 に答える 1

1

私は間違っているかもしれませんが、Tiles は JSP 全体を解析する必要があると思います。現在のレイアウトは、テンプレートを内部で使用するターゲット JSP から取得されます。タイル定義を使用して、テンプレートをコンテンツのターゲット フィルとして指定できます。この方法により、タイルの継承をより効率的に使用できるようになり、「テンプレート」が 2 番目ではなく最初にレンダリングされるため、この問題を解決できる可能性があると思います。

例: tiles.xml

<tiles-definitions>
    <definition name="myTemplate" template="/WEB-INF/jsf/template.jsp">
         <put-attribute name="content" value="" />
    </definition>
    <definition name="content" extends="myTemplate">
         <put-attribute name="content" value="content.jsp" />
    </definition>
</tiles-definitions>

ここで、結果の型としてタイルの定義を指定する必要があります... struts2 を使用している場合は、そうではありませんが、すべてのフレームワークで可能性があります。

テンプレート jsp は同じように見えます。コンテンツ jsp は次のように書き換えられます。

<%@taglib uri="http://taglibs.com/tags" prefix="s"%>
<%System.out.println("evaluating content.jsp");%>
<s:inner />

ページにタイル ロジックを混在させる必要がなくなったことに注意してください。内容はそれだけです。tiles.xml ファイルは必要以上に複雑であることに気付くでしょうが、この例では 'put 属性' は 1 つしかありませんが、より複雑なページでは多数の属性を持つことができるため、'myTemplate' が生成されることを示したかったのです。コンテンツだけでなく、ヘッダー、フッター、サイドバー、おそらくヘッダーも含まれているページで、ページ上のスクリプトと CSS を変更し、次に例のように単純に拡張してから、必要な部分のみを変更します (通常は、それはコンテンツのみです)、さらにその定義を拡張できます... Base Layout -> Secure Layout Base を拡張しますが、おそらくヘッダーを変更してロックアイコンを含めます ->

于 2010-11-19T22:50:45.430 に答える