rich:datatable rendering problem for a4j:commandLinks
koraycetinbas Feb 13, 2009 3:09 PMHi,
I have an application using richfaces 3.3.0, jsf 1.2 and tomcat 6.0 (actually i am using jboss portal but the problem can be reproduced with tomcat or glassfish as well. I used to think the problem was somehow related to portlet bridge but it seems that it is not)
I used to see this problem on previous versions of richfaces but i suppose the problem still exists (at least for me)
Currently what i am trying to do is to render a rich:dataTable using a a4j:commandLink. The datatable includes a4j:commandLinks. Here is what i am trying to do.
the jsp page is:
<a4j:form>
<h:outputText value="Search Screen" />
<br/>
<a4j:commandButton value="Search" action="#{searchBean.search}"/>
</a4j:form>
<h:panelGrid rendered="#{searchBean.displaySearchResults}">
<a4j:form id="resultTable">
<rich:dataTable value="#{searchBean.searchResults}" var="iter">
<f:facet name="header">
<rich:columnGroup>
<rich:column>
<h:outputText value="Name" />
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<a4j:commandLink value="#{iter}" action="#{searchBean.select}"/>
</rich:column>
</rich:dataTable>
</a4j:form>
</h:panelGrid>
Datatable is not rendered at initial load.
Backing bean code is
private boolean displaySearchResults = false;
private String[] searchResults = null;
public String[] getSearchResults() {
return searchResults;
}
public void setSearchResults(String[] searchResults) {
this.searchResults = searchResults;
}
public boolean isDisplaySearchResults() {
return displaySearchResults;
}
public void setDisplaySearchResults(boolean displaySearchResults) {
this.displaySearchResults = displaySearchResults;
}
public void search(){
searchResults = new String[3];
searchResults[0] = "firstResult";
searchResults[1] = "secondResult";
searchResults[2] = "thirdResult";
setDisplaySearchResults(true);
System.out.println("Search button clicked!");
navigateAndRerender("index");
//return "index";
}
public void select(){
System.out.println("Result selected!");
}
private void navigateAndRerender(String path)
{
FacesContext facesContext = FacesContext.getCurrentInstance();
Application application = facesContext.getApplication();
NavigationHandler navigationHandler = application.getNavigationHandler();
navigationHandler.handleNavigation(facesContext, null, path);
facesContext.renderResponse();
}i have seen that, if i do not render at least one row for rich:dataTable at the initial load of the page, no matter what i do (use reRender for commandButton, or force reRendering for the whole page like navigateAndReRender method above or making ajax call generate a jsf response) i can not make a4j:commandLinks work inside the table. Rendering an empty table does not also work.
I have also tried giving unique ids to all components, using h:columns, using h:form etc. but none of them did the trick.
When i click the command link, an ajax request is sent to the server (i have verified it by writing my own a4j filter) but backing bean method is not triggered.
I have looked a lot around previous related forum topics and jira bugs but i suppose the mentioned similar problems are not the same as mine.
Is what i am trying to do something what i should not try to do?
Could you please help me with what i am doing wrong?
I must be missing something somewhere