3

ui:include レンダラーをカスタマイズして、HTML 出力を生成するときに、インクルード ファイルの開始と終了を示すコメントも追加する必要があります。

例、空白を想定file.xhtml:

入力

<ui:include src="file.xhtml" />

出力

<!-- START file.xhtml -->
<!-- END file.xhtml -->

現時点では、MyFaces で JSF2.2 を使用していますが、どうすればそれができるのでしょうか?

4

3 に答える 3

2

ui:include はUiComponentではなく、レンダラーがありません。これは FaceletTagHandlerであるため、ビューが構築 (または復元) されたときに実行されます。これを変更して、目的のコメントを持つTagHandler追加ELInstructionのインスタンスをコンポーネント ツリーに含める必要があります。

既存のタグ ライブラリのタグ ハンドラをオーバーライドするための優れた拡張ポイントを JSF が提供しているとは思いません。独自のタグ ライブラリで新しいタグを定義できます。組み込みライブラリでこれが可能かどうかはわかりませんが、既存のタグ ライブラリ定義を置き換えることもできます。または、そのクラスに独自の定義を提供することにより、クラスパス内の元のタグ ハンドラーのクラス定義をシャドウすることもできます (元のソース コードをコピーして変更することで取得できます)。これらのアプローチはすべて、フレームワーク コードの複製を必要とするため、メンテナンスが脆弱になります。

于 2015-05-21T09:08:29.250 に答える
1

次の facelet タグを定義することをお勧めします。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:c="http://java.sun.com/jsp/jstl/core"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:h="http://java.sun.com/jsf/html"
            >
<ui:composition>   
  <h:outputText value="&lt;START FILE!--#{source}--&gt;"/>
  <ui:include src="#{source}">
    <ui:insert name="includeParams"/>
  </ui:include>
  <h:outputText value="&lt;!--END FILE!--#{source}--&gt;"/>
</ui:composition>
</html>

ui:include の代わりにこのタグをコードに使用するには:

<my:include source="file.xhtml">
  <ui:define name="includeParams">
    <ui:param name="param1" value="value1"/>      
    <ui:param name="param2" value="value2"/>      
  </ui:define>
</my:include>
于 2015-05-25T07:26:45.470 に答える