2009-07-07 7 views
4

J'ai un composant Facelet et j'ai un bean backing pour ça. Quand j'inclure mon composant à une page que je passe haricots de la page à mon composant:Comment définir la valeur de la propriété bean dans la page jsf?

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

Mon composant ont également la sauvegarde de haricots et j'essaie de passer la valeur d'invoquer bean de page à mon:

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

Mais cette méthode ne fonctionne pas? Il y a un moyen de passer de la valeur d'un haricot à l'autre?

J'essaie de créer un composant personnalisé difficile qui doit effectuer une validation et d'autres actions sur les choses qui lui ont été transmises? Peut-être que je suis dans le mauvais sens?

Répondre

2

Vous pouvez passer le bean en tant qu'attribut sur le composant (je suppose que lorsque vous dites "composant" vous utilisez ui:component).

Pour un composant:

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

Vous pourriez avoir un grain de support avec ces méthodes:

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; 
} 

Pas très élégant, mais je ne suis pas tout familier avec la mécanique de Facelets comprend et c'est la première chose qui m'est venue à l'esprit. Notez que les attributs peuvent être conservés lorsque la vue est enregistrée. Je ne me souviens pas des éléments définis dans la mappe des attributs.

+0

Merci, ça marche pour moi, mais je trouve un autre moyen de faire ce que je veux. – aindl

2

Habituellement, vous attribuer des valeurs à certains contrôles d'entrée comme:

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

Cela implique à la fois obtenir et définir la valeur de la propriété someField. Veuillez fournir des détails sur ce qui devrait déterminer la valeur de #{pageBean.field} dans votre cas.

+0

une grande réponse simple à la question! – Olle89

0

Voici un code d'un de mes fichiers de facelets. Comme vous pouvez voir la valeur de la fève passée en paramètre, à savoir:

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

et la propriété de la fève, DTO, peut être consulté en utilisant la notation [DTO].

<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>