2

問題: ui:include JSF タグの背後にあるクラス を使用するには、IncludeHandler を使用する必要があることがわかりました。

<ui:include>

プログラム的に。ただし、コンストラクターには「構成」パラメーターが必要であり、これを設定する方法がわかりません。
次のような単純なインクルードに IncludeHandler を使用する方法を示す例を挙げてください

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

私の jsf-component は現在プログラムでビルドされていますが、「.xhtml」として記述された一部を含めたいと考えています。したがって、Webデザイナーは最終的に次のようなコンポーネントを持っているだけです

<fg:generator></fg:generator>

スタイリングをいじるいくつかの「.xhtml」ファイル。IncludeHandler (まだ Java である必要があります) よりも優れたアプローチがある場合は、私に知らせてください:)

4

1 に答える 1

4

<ui:include>プログラムで使用することが唯一の目的である場合は、FaceletContext#includeFacelet()代わりに使用する必要があります。カスタム コンポーネント内にいると仮定します。

FacesContext facesContext = FacesContext.getCurrentInstance();
FaceletContext faceletContext = (FaceletContext) facesContext.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
faceletContext.includeFacelet(this, "include.xhtml"); // this is your current UIComponent.

コマンド ボタンによる動的インクルードを示す別のキックオフ例を次に示します。

<h:form>
    <h:commandButton value="include" action="#{bean.include}" />
</h:form>
<h:panelGroup id="include" />

public void include() throws IOException {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    FaceletContext faceletContext = (FaceletContext) facesContext.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
    faceletContext.includeFacelet(facesContext.getViewRoot().findComponent("foo"), "include.xhtml");
}
于 2012-06-01T16:16:36.133 に答える