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
