Composition Component with Seam Argument Passing
ryneezy.ryan.samiley.live.com Nov 24, 2010 12:59 PMHello,
I am trying to consolidate a lot of duplicate code by creating Composition components using Facelets.
I'm using this article as a guide: http://www.ibm.com/developerworks/java/library/j-facelets/
The article states I can call actions by using separate attributes in my custom tag to pass in the managed bean and method name. Inside the composition component, I can bind a method to the managed bean with square brackets. For example,
#{managedBean[actionName]}This works great when the method takes no arguments, but most of our Seam managed beans take arguments. How do I go about passing in an argument.
Specifically, I am trying to consolidate an inputText, suggestionBox, and an A4J onSelect call into one tag.
Here is what the tag will look like:
<my:personSuggest
id="nameSuggest"
value="#{aPersonEntity}"
personSuggestBean="#{personSuggestionManager}"
suggestAction="suggestByName"
selectionListenerBean="#{personSelectBean}"
selectionListenerAction="personSelected"/>Here is the markup for the Composition Component:
<!-- Set optional values when they do not exist -->
<c:if test="${empty minchars}">
<c:set var="minchars" value="3"/>
</c:if>
<c:if test="${empty nothingLabel}">
<c:set var="nothingLabel" value="No results for entered name."/>
</c:if>
<h:inputText
id="#{id}"
value="#{value.fullName}"/>
<rich:suggestionbox
for="#{id}"
var="suggestedPerson"
immediate="true"
minChars="#{minchars}"
nothingLabel="#{nothingLabel}"
suggestionAction="#{personSuggestBean[suggestByName]}"
requestDelay="0">
<h:column>
<h:outputText value="#{suggestedPerson.fullName} #{suggestedPerson.middleInitial}" />
</h:column>
<h:column>
<h:outputText value="#{suggestedPerson.badgeNumber}"/>
</h:column>
<a4j:support
event="onselect"
immediate="true"
action="#{selectionListenerBean[selectionListenerAction(suggestedPerson)]}"
requestDelay="1000"/>
</rich:suggestionbox>The rich:suggestionBox's suggestionAction works because I am not trying to pass in any arguments. The a4j:support's action does not because I am passing in an argument.
How do I get this to work with Seam's argument passing?
Thanks,
Ryan