Comment lier composant JSF pour la sauvegarde de haricot de la propriété
J'ai un problème avec une liaison p:commandButton
à une propriété dans un backing bean. J'ai essayé de simplifier mon code pour afficher idée générale.
ExampleBean est un backing bean
public class ExampleBean {
public String title;
List<ExampleWrapper> list;
//Getters and setters
}
ExampleWrapper est un POJO
public class Wrapper {
public String name;
public String description;
public CommandButton button;
//Listener which changes button state
//Getters and setters
}
index.xhtml est une page principale:
<h:form>
<h:outputText value="Title" />
<p:inpurText value="#{exampleBean.title}"
<ui:include src="list.xhtml">
<ui:param name="bean" value="#{exampleBean}">
</ui:include>
</h:form>
liste.le xhtml est un fragment je veux être réutilisés dans quelques endroits:
<ui:composition ...>
<ui:repeat id="list" var="exampleWrapper" value="#{bean.list}">
<h:outputText value="#{exampleWrapper.name}"/>
<h:outputTextarea value="#{exampleWrapper.description}"/>
<p:commandButton id="button" binding="#{exampleWrapper.button}"
value="Button" />
</ui:composition>
Donc, je reçois de l'exception:
javax.el.PropertyNotFoundException: /liste.xhtml ... binding="#{exampleWrapper.bouton}": la Cible Inaccessible, l'identificateur 'exampleWrapper' résolu à null
Sans binding
attribut tout fonctionne et affiche fine
Pourriez-vous expliquer le pourquoi et le comment puis-je lier touche à cette POJO propriété? Toute aide sera appréciée
Je suis en utilisant JSF 2.0.2 avec Primefaces 3.0.1
OriginalL'auteur nikagra | 2012-03-15
Vous devez vous connecter pour publier un commentaire.
La
binding
(etid
) attribut d'un JSF composant de l'INTERFACE utilisateur est résolu pendant les temps de construction. Le#{exampleWrapper}
instance est pas disponibles lors de l'affichage de la construction. Le point de vue du temps de compilation est le moment où le fichier XHTML est analysé dans un composant JSF arbre. Le#{exampleWrapper}
est disponible uniquement lors de l'affichage de temps de rendu. Le point de vue le temps de rendu est le moment où le JSF composant de l'arbre génère du code HTML de sortie.Fondamentalement, il n'y a qu' un
<p:commandButton>
dans le composant de l'arbre qui génère à sa sortie HTML en plusieurs fois, comme beaucoup comme le<ui:repeat>
itère. Vous devez le lier à la#{bean}
au lieu de cela, ou à l'utilisation de JSTL<c:forEach>
au lieu de<ui:repeat>
. Les balises JSTL s'exécute à savoir pendant les temps de construction et le<c:forEach>
produira donc physiquement plusieurs JSF composants de l'INTERFACE utilisateur. Mais, le plus souvent, la liaison de composants à la sauvegarde de haricots est inutile, JSF 2.x. Quelle que soit l'exigence fonctionnelle vous avez eu à l'esprit pour lesquelles vous pensé que c'est la solution, il peut certainement être résolu dans une meilleure façon.Utiliser l'effet fourni des attributs de la place. E. g.
rendered="#{exampleWrapper.rendered}"
,styleClass="#{exampleWrapper.styleClass}"
,disabled="#{exampleWrapper.disabled}"
, etc.J'ai trouvé votre réponse à une autre question: stackoverflow.com/a/2456652/657792
N'hésitez pas à poser une nouvelle question si vous stucks. C'est à savoir futiles.
Cela signifie que chaque fois que nous utilisons
binding
, si nous manuellement actualiser la page (f5), le contenu de la bindings composant peut devenir malpropre à cause de l'explication ci-dessus?OriginalL'auteur BalusC