I have a JSF composite component which is a list of email addresses that can be dynamically added to, and deleted from:
<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>
This component is used as follows:
<edit:emailAddresses addressable="#{personAddressable}" id="emailAddresses"/>
Where the 'deleteEmail' action is invoked it causes an exception:
ERROR [STDERR] Caused by: javax.el.MethodNotFoundException: /resources/edit/emailAddresses.xhtml @34,130 action="#{cc.attrs.addressable.remove(email)}": Method not found: No-Interface view for endpoint [ jboss.j2ee:jar=tephra.war,name=PersonAddressable,service=EJB3 ] and session 3j011-mgweoj-ghfwhlvv-1-ghfy2e5j-e1.remove()
However if the action is changed to personAddressable.remove(email) it works! This seems like simple parameter substitution and shouldn't make any difference. The action for adding an email address, which does not have a parameter, works fine.
I won't post the code for the backing bean as I've proved it works. But for reference it is a stateful conversation scoped bean (CDI).
I am using JBoss AS6-M5 which uses el 2.2.