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