2009-07-07 4 views
4

Ich habe Facelet-Komponente und ich habe Backing Bean dafür. Wenn ich meine Komponente zu einem gewissen Seite enthalten passiere ich Bohne von Seite zu meiner Komponente:Wie zum Festlegen der Bean Eigenschaftswert in JSF-Seite?

<ui:include src="./WEB-INF/templates/myTemplate.xhtml"> 
        <ui:param name="pageBean" value="#{thisPageBean}" /> 
</ui:include> 

auch meine Komponente Backing Bean hat und ich versuche Wert zu übergeben von Aufrufen Seite Bohne zu meinem:

<c:set target="#{componentBean}" property="field" value="#{pageBean.field}" /> 

Aber diese Methode funktioniert nicht? Es gibt eine Möglichkeit, den Wert einer Bohne an eine andere zu übergeben.

Ich versuche, eine schwierige benutzerdefinierte Komponente zu erstellen, die einige Validierung und andere Aktionen auf Dinge durchführen muss, die an sie übergeben wurde? Vielleicht bin ich falsch?

Antwort

2

Sie könnten die Bean als Attribut für die Komponente übergeben (ich nehme an, wenn Sie sagen, "Komponente" verwenden Sie ui:component).

Für eine Komponente:

<ui:component binding="#{componentBean.myComponent}"> 
    <f:attribute name="foo" value="#{pageBean.field}" /> 
    <h:outputText value="#{componentBean.something}" /> 
</ui:component> 

Sie könnten eine Backing Bean mit diesen Methoden haben:

private Object field; 
private UIComponent component; 

public void setMyComponent(UIComponent c) { component = c; } 
public UIComponent getMyComponent() { return component; } 

private void lookupFields() { 
    field = component.getAttributes().get("foo"); 
} 

public String getSomething() { 
    if (field == null) { 
    lookupFields(); 
    } 
    return "" + field; 
} 

Nicht sehr elegant, aber ich bin nicht so vertraut mit der Mechanik von Facelets umfasst und das ist das erste, was mir eingefallen ist. Beachten Sie, dass die Attribute möglicherweise beibehalten werden, wenn die Ansicht gespeichert wird. Ich kann mich nicht an Dinge erinnern, die in der Attributzuordnung festgelegt werden.

+0

Danke, es funktioniert für mich, aber ich finde einen anderen Weg zu tun, was ich will. – aindl

2

Normalerweise weisen Sie Werte für einige Eingabesteuerungen wie:

<h:inputText value='#{pageBean.field}'/> 

, dass beide impliziert immer und den Wert von someField Eigenschaft festlegen. Bitte geben Sie Details darüber, was den Wert von #{pageBean.field} in Ihrem Fall bestimmen sollte.

+0

eine große einfache direkte Antwort auf die Frage! – Olle89

0

Hier ist ein Code aus einer meiner Facelets-Dateien. Wie Sie den Wert der als Parameter übergeben Bohne sehen können, das heißt:

<ui:param name="bean" value="#{thisPageBean}" /> 

und die Eigenschaft der Bohne, dto, können die [dto] Notation zugegriffen werden.

<h:panelGroup> 
    <h:selectOneMenu id="titleMenu" value="#{bean[dto].title}"> 
     <f:selectItems value="#{suburbsMBean.titles}" /> 
    </h:selectOneMenu> 
    <h:message for="titleMenu" styleClass="error" /> 
</h:panelGroup> 
Verwandte Themen