2013-05-30 24 views
9

私は異なるアプリケーションで使用されるFaceletを持っています。 私はそれをコピーしないで、再利用します。いくつかのロジックは、使用されるアプリケーションによって異なる可能性があるため、ビューを管理するバッキングBeanを渡す必要があります。バッキングBeanをパラメータとしてFaceletに渡すと、

コンポジットコンポーネントは使用しませんが、 Faceletを開き、ビューを管理するBeanを指定します。どうすればこれを達成できますか?

は私が例を挙げてみましょう:

<ui:composition template="/resources/common/templates/template.xhtml" 
    xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:a4j="http://richfaces.org/a4j" 
    xmlns:rich="http://richfaces.org/rich" xmlns:fn="http://java.sun.com/jsp/jstl/functions"> 
    <ui:define name="content"> 
     <!-- somehow establish the backing bean that will manage formView.xhtml --> 
     <!-- f:set assign="ParameterBean" value="#{Bean}"/--> 
     <ui:include src="formView.xhtml" /> 
    </ui:define> 
</ui:composition> 

formView.xhtml:

<ui:composition template="/resources/common/templates/template.xhtml" 
    xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:a4j="http://richfaces.org/a4j" 
    xmlns:rich="http://richfaces.org/rich" xmlns:fn="http://java.sun.com/jsp/jstl/functions"> 
    <ui:define name="content"> 
     <h:outputText value="#{ParameterBean.texto}" /> 
    </ui:define> 
</ui:composition> 

答えて

22

あなたはそのため<ui:param>を使用することができます。 <ui:include>にネストする必要があります。インスタンス変数名は下部ケースで始めなければならないことを、具体的な問題、標準Java Naming Conventions状態に無関係

<ui:include src="formView.xhtml"> 
    <ui:param name="ParameterBean" value="#{Bean}" /> 
</ui:include> 

。それぞれparameterBean#{bean}が使用されるようにコードを変更する必要があります。

+0

どのように 'ParameterBean'は、インスタンスのメソッドを呼び出すために参照するのですか? – Thufir

0

私が参考に昨日それを見つけているだろうので、私はこれを探していたとき、ここでこれを行う方法の簡易版は余分なテンプレート、定義し、名前空間なしで、次のとおりです。

File1.xhtml(ルートタグは、さらにあなたはまた、ネストでき

<ui:composition ... xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" ... > 
    <h:outputLabel value="#{person.name}" /> 
</ui:composition> 


中)

<ui:include src="File2.xhtml"> 
    <ui:param name="person" value="#{whatever_value_you_want_to_pass}" /> 
</ui:include> 

File2.xhtml問題ではありません同じ方法。

File1.xhtml

<ui:include src="File2.xhtml"> 
    <ui:param name="person" value="#{whatever_value_you_want_to_pass}" /> 
</ui:include> 

File2.xhtml

<ui:composition ... xmlns:ui="http://java.sun.com/jsf/facelets" ... > 
    <ui:include src="File3.xhtml"> 
    <ui:param name="name" value="#{person.name}" /> 
    </ui:include> 
</ui:composition> 

File3.xhtml

<ui:composition ... xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" ... > 
    <h:outputLabel value="#{name.length}" /> 
</ui:composition> 
+0

これは以下の回答とどのように違うのか分かりません。 – Kukeltje

+0

答えがどのように使われているかを正確に理解するのは苦労していたので、他の人にはもっと明らかにしようとしました。 – Chris

+0

それからあなたは質問を編集してこれらのことを取り除き、なぜこれをしたのかを「コメント」に言及することができます。他の人が変更を受け入れると、それが表示されます。次に2番目の答えを作成する必要はありません。 – Kukeltje

関連する問題