ui:include レンダラーをカスタマイズして、HTML 出力を生成するときに、インクルード ファイルの開始と終了を示すコメントも追加する必要があります。
例、空白を想定file.xhtml:
入力
<ui:include src="file.xhtml" />
出力
<!-- START file.xhtml -->
<!-- END file.xhtml -->
現時点では、MyFaces で JSF2.2 を使用していますが、どうすればそれができるのでしょうか?
ui:include レンダラーをカスタマイズして、HTML 出力を生成するときに、インクルード ファイルの開始と終了を示すコメントも追加する必要があります。
例、空白を想定file.xhtml:
入力
<ui:include src="file.xhtml" />
出力
<!-- START file.xhtml -->
<!-- END file.xhtml -->
現時点では、MyFaces で JSF2.2 を使用していますが、どうすればそれができるのでしょうか?
ui:include はUiComponentではなく、レンダラーがありません。これは FaceletTagHandlerであるため、ビューが構築 (または復元) されたときに実行されます。これを変更して、目的のコメントを持つTagHandler追加ELInstructionのインスタンスをコンポーネント ツリーに含める必要があります。
既存のタグ ライブラリのタグ ハンドラをオーバーライドするための優れた拡張ポイントを JSF が提供しているとは思いません。独自のタグ ライブラリで新しいタグを定義できます。組み込みライブラリでこれが可能かどうかはわかりませんが、既存のタグ ライブラリ定義を置き換えることもできます。または、そのクラスに独自の定義を提供することにより、クラスパス内の元のタグ ハンドラーのクラス定義をシャドウすることもできます (元のソース コードをコピーして変更することで取得できます)。これらのアプローチはすべて、フレームワーク コードの複製を必要とするため、メンテナンスが脆弱になります。
次の 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="<START FILE!--#{source}-->"/>
<ui:include src="#{source}">
<ui:insert name="includeParams"/>
</ui:include>
<h:outputText value="<!--END FILE!--#{source}-->"/>
</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>