Richfaces tooltip componentcontrol param

jsfparamrichfacestooltip

I have a table where each cell click opens a tooltip using the componentControl tag, this works. But I wanted to pas a parameter to the tooltip, which is different per table cell.

<rich:toolTip id="tooltip" attached="false" mode="ajax">
 <ui:include id="projectDetailInclude" src="projectDetail.xhtml">
   <ui:param name="projectDetail" value="#{projectBean.getProjectDetail(project, index)}" />
 </ui:include>
</rich:toolTip>
<rich:dataTable id="detailDataTable" var="row" value="#{projectBean.projects}">
 <rich:column id="rowLabelColumn">
  <h:outputText value="#{row.label}" />
 </rich:column>
 <rich:columns id="detailColumns" var="column" value="#{projectBean.columns}" index="index" >
  <f:facet name="header">
   <h:outputText value="#{column}" />
  </f:facet>
  <div id="projectDetailBlock" class="#{row.values[index]}">
   <rich:componentControl event="onclick" for="tooltip" operation="show">
    <f:param name="project" value="#{project}" />
    <f:param name="index" value="#{index}" />
   </rich:componentControl>
  </div>
 </rich:columns>
</rich:dataTable>

In the code above, i try to pass the project and index parameters. All i get is a nice stacktrace. (which disappers when removing the params in the componentControl tag).

java.lang.StackOverflowError
 java.lang.reflect.InvocationTargetException.<init>(InvocationTargetException.java:54)
 sun.reflect.GeneratedMethodAccessor208.invoke(Unknown Source)
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 java.lang.reflect.Method.invoke(Method.java:597)
 org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1773)
 org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1132)
 org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686)
 org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
 org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
 org.ajax4jsf.javascript.ScriptUtils.writeScriptToStream(ScriptUtils.java:168)
 org.ajax4jsf.javascript.ScriptUtils.writeScriptToStream(ScriptUtils.java:174)
 org.ajax4jsf.javascript.ScriptUtils.writeScriptToStream(ScriptUtils.java:83)

Best Answer

A similar case is covered in a RichFaces showcase example, so it should work: http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=componentControl

However the target of your component control is the show method of the tooltip.js component js. The only parameter that the show method takes is the event parameter, so your f:params aren't doing what you think.

Regardless, you shouldn't need the parameters in your componentControl, the EL in the value attribute of your ui:param should evaluate correctly for each row. What happens if you try the above code without those f:params?

Related Topic