J'ai un composant composite JSF qui est une liste d'adresses e-mail qui peuvent être ajoutées dynamiquement, et supprimés de:JSF2 expression composite de cc.attrs ne pas évaluer les paramètres d'action correctement
<composite:interface shortDescription="Display party email addresses">
<composite:attribute name="addressable" required="true"/>
</composite:interface>
<composite:implementation>
<h:panelGroup layout="block" id="emails">
<h:dataTable id="emailList" value="#{cc.attrs.addressable.emailAddresses}" var="email" styleClass="data-list small-list" cellpadding="0" cellspacing="0">
<h:column>
<f:facet name="header">Address</f:facet>
<h:inputText id="emailAddress" value="#{email.address}" size="30" maxlength="100" required="true" label="Email"/>
</h:column>
<h:column>
<f:facet name="header">Description</f:facet>
<h:inputText id="emailDescription" value="#{email.description}" size="20" maxlength="100"/>
</h:column>
<h:column>
<f:facet name="header">
<h:panelGroup styleClass="right-align" layout="block">
<h:commandLink id="addEmail" action="#{cc.attrs.addressable.addEmailAddress}" title="Add an email address">
<f:ajax execute=":#{cc.clientId}:emails" render=":#{cc.clientId}:emails"/>
<h:graphicImage library="images" name="add.png" id="emailAddImg"/>
</h:commandLink>
</h:panelGroup>
</f:facet>
<h:commandLink id="deleteEmail" action="#{cc.attrs.addressable.remove(email)}" title="Remove the email from this row">
<f:ajax execute=":#{cc.clientId}:emails" render=":#{cc.clientId}:emails"/>
<h:graphicImage library="images" name="delete.png" id="emailDeleteImg"/>
</h:commandLink>
</h:column>
</h:dataTable>
</h:panelGroup>
</composite:implementation>
Ce composant est utilisé comme suit:
<edit:emailAddresses addressable="#{personAddressable}" id="emailAddresses"/>
Lorsque l'action 'deleteEmail' est invoquée, il provoque une exception:
erreur [S TDERR] Causée par: javax.el.MethodNotFoundException: /resources/edit/emailAddresses.xhtml @ 34,130 action = "# {cc.attrs.addressable.remove (email)}": Méthode non trouvée: vue No-Interface pour le point final [ jboss.j2ee: pot = tephra.war, name = PersonAddressable, service = EJB3] et une session 3j011-mgweoj-ghfwhlvv-1-ghfy2e5j-e1.remove()
Toutefois, si l'action est changé en personAddressable. enlever (email) ça marche! Cela semble être une simple substitution de paramètres et ne devrait pas faire de différence. L'action pour ajouter une adresse e-mail, qui n'a pas de paramètre, fonctionne correctement.
Je ne publierai pas le code pour le bean backing car j'ai prouvé que cela fonctionne. Mais à titre de référence, il s'agit d'une conversation stateful scoped bean (CDI). J'utilise JBoss AS6-M5 qui utilise le 2.2.
Quelle implémentation JSF/version? – BalusC
Mojarra 2.0.2-FCS selon jar-versions.xml. Bon point cependant. Je pourrais essayer d'obtenir le dernier et le meilleur pour voir si cela aide. – Andrew
En fait, juste mis à niveau vers JBoss6-CR1 qui a Mojarra 2.0.3 et MyFaces 2.0.1. Aucune de ces implémentations n'a résolu le problème. Cela ne me surprend guère car l'implémentation de jboss-el est la même pour M5 et CR1 (1.0_02.CR2). – Andrew