a4j link not rendering as exected
rajeshiv Jun 17, 2009 12:10 PMHi,
In my JSF RI 1.1 application, Iam using richfaces 3.0 version. I have the following scenario which is not executing properly.
I have a datatable, and one of the columns in the datatable is a a4j:commandLink, on clicking this link Iam reRendering a rich:panel which is part of the data table. The rich:panle is rendered based on a boolean flag in my beacking bean. The first time I log in to the page , the boolean criteria is true when I click the commandLink, the rich:panel is reRendered corectly. However Iam paging through the results in my datatable usinsg the commadLinks on the header of my table, when I click these links Iam delberately setting the boolean criteria to display the rich:panel to false, it works fine . Now once the boolean criteria is set to false, when I aagin click on my commanLink, even though I reset my boolean criteria to true and reRender the rich:panel it is not displaying the rich:panel.
Please find below in my jsp code, I have displayed in bold the a4j:commandLink and the corresponding rich:panel which it is trying to reRender.
I hope I was able to convey my probelm properly.
In short:
The a4j:commandLink reRenderes the rich:panel properly the first time I log in, but after that when I click any other links on my page (which reRenders something else on my page and sets the boolean flag to render rich:panel to false), however when I click the a4j:commanLink ,and in my backing bean am setting the boolean criteria to true, and reRender the rich:panel it is not reRendering, or I guess the boolean criteria is is stilll set to false for some reason.
Please let me know what is that Iam missing, thanks in advance for your help!!!
<html> <head> <%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%> <%@ taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="rich"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <link rel="stylesheet" type="text/css" href="<c:url value='/css/hdr_body.css' />" /> <link rel="stylesheet" type="text/css" href="<c:url value='/css/search-results.css' />" /> <link rel="stylesheet" type="text/css" href="<c:url value='/css/menu.css' />" /> <link rel="stylesheet" type="text/css" href="<c:url value='/css/form-controls.css' />" /> <link rel="stylesheet" type="text/css" href="<c:url value='/css/cheat-sheet.css' />" /> <script language="JavaScript" src="<c:url value='/js/TDFScript.js' />"></script> <style> .panel { vertical-align:top; } </style> </head> <body> <div id="wrap"> <f:view> <f:subview id="menu"> <jsp:include page="incld/toolbar.jsp" /> </f:subview> <h:messages id="messages" layout="table" infoClass="okStatusText" errorClass="errorMsgText" /> <div class="oneLineSearchFieldSet"> <fieldset> <legend class="oneLineSearchLegend">Test Data Search Results</legend> <h:form> <h:selectOneMenu id="selectDataSource" value="#{oneLineSearchBean.selectedDataSource}" disabled="true"> <f:selectItems value="#{oneLineSearchBean.availableDataSources}" /> </h:selectOneMenu> <h:inputText id="searchText" value="#{oneLineSearchBean.searchText}" styleClass="textEntry" tabindex="1" size="60" maxlength="800" disabled="true"/> <h:commandButton id="modifyButton" value="Modify" action="#{searchResultsBean.modifyQuery}" styleClass="regularButton" rendered="#{not viewset}" onmouseover="window.status='Search Test Data Repository';return true" onmouseout="window.status='';return true" /> <h:commandLink id="saveQueryLink" value="Save Query" action="#{tagQueryBean.createQueryTag}" styleClass="smallLink" rendered="#{not viewset}"> </h:commandLink> <h:commandLink id="cancel" value="Cancel" action="#{searchResultsBean.cancel}" styleClass="smallLink" rendered="#{not viewset}"> </h:commandLink> </h:form> <p> <h:panelGroup id="resultDisplayMessage" rendered="#{not empty SEARCH_RESULTS_SIZE}" > <h:outputText id="display" value="Displaying"/> <h:outputText id="firstRecordNum" value="#{searchResultsBean.data.first + 1}" style="font-weight:bold;padding:2px"/> <h:outputText id="to" value="to"/> <h:outputText id="lastRecordNum" rendered="#{SEARCH_RESULTS_FIRST_VISIT && not empty SEARCH_RESULTS_SIZE}" value="20" style="font-weight:bold;padding:2px" /> <h:outputText id="lastRecordNumber" rendered="#{not SEARCH_RESULTS_FIRST_VISIT}" value="#{searchResultsBean.data.first + searchResultsBean.data.rows}" style="font-weight:bold;padding:2px"/> <h:outputText id="searchResults" value="of your search results"/> </h:panelGroup> </p> </fieldset> </div> <%-- Begin results table/form --%> <a4j:form id="searchResultsForm"> <rich:panel id="searchResultsPanel" style="width:100%;border:0px;text-align:right" headerClass="searchResultsPanelHeader"> <f:facet name="header"> <h:panelGroup id="headerPanel"> <h:panelGroup style="padding-right:300px" id="commandPanel"> <h:commandButton id="selectAllButton" value="Select All" styleClass="buttons special" style="margin:2pt;display: none; visibility: hidden;" action="#{searchResultsBean.selectAll}"/> <h:commandButton value="Deselect All" styleClass="buttons special" style="margin:2pt;display: none; visibility: hidden;" id="deSelectAllButton" action="#{searchResultsBean.deselectAll}"/> <h:selectBooleanCheckbox id="selectBox" value="#{searchResultsBean.selectAllCheckBox}" onclick="selectAllCheckBoxes();" style="margin-right:40px" > </h:selectBooleanCheckbox> <h:selectOneMenu value="#{searchResultsBean.selectedAction}" style="margin-right:10px" id="actionSelect"> <f:selectItems value="#{searchResultsBean.availableActions}" /> </h:selectOneMenu> <a4j:commandButton value="Go" id="goButton" action="#{scenarioRecordBean.executeAction}" styleClass="specialPanelHeader" reRender="messages"/> </h:panelGroup> <h:panelGroup style="padding-left:300px" id="linkPanelGroup"> <a4j:commandLink value="first" action="#{searchResultsBean.pageFirst}" id="first" rendered="#{!searchResultsBean.navFirst}" styleClass="nav" style="margin-right:5px" reRender="searchResultsPanel,resultDisplayMessage" immediate="true"> </a4j:commandLink> <a4j:commandLink value="<<" action="#{searchResultsBean.pagePrevious}" rendered="#{!searchResultsBean.navPrevious}" id="navPrev" styleClass="nav" style="margin-left:5px;margin-right:5px;" reRender="searchResultsPanel,resultDisplayMessage" immediate="true" > </a4j:commandLink> <a4j:commandLink value=">>" action="#{searchResultsBean.pageNext}" id="navNext" rendered="#{! searchResultsBean.navNext}" styleClass="nav" style="margin-left:5px;margin-right:5px;" reRender="searchResultsPanel,resultDisplayMessage" immediate="true"> </a4j:commandLink> <a4j:commandLink value="last" action="#{searchResultsBean.pageLast}" id="last" rendered="#{! searchResultsBean.navLast}" styleClass="nav" style="margin-right:5px;" reRender="searchResultsPanel,resultDisplayMessage" immediate="true"> </a4j:commandLink> <a4j:status id="stateStatus" startText="Processing..." startStyle="background-color:#ffA500"/> </h:panelGroup> </h:panelGroup> </f:facet> <rich:dataTable style="border:0px"value="#{SEARCH_RESULTS}" var="hit" id="searchresults" rendered="#{SEARCH_RESULTS != null && not empty SEARCH_RESULTS_SIZE}" headerClass="center" width="100%" binding="#{searchResultsBean.data}" rows="20" cellpadding="0" cellspacing="0"> <h:column> <h:panelGrid columns="3" border="0" id="searchResultsTable" width="100%" columnClasses="panel" style="border-bottom-style:solid;border-bottom-color:black;border-bottom-width:thin"> <rich:panel style="border:0px;margin:0px"> <h:selectBooleanCheckbox value="#{hit.selected}" id="selectBox" style="align:center" /> </rich:panel> <rich:panel style="border:0px;margin:0px" id="identPanel"> <h:outputText style="font-weight:bold" value="This is a No-Hit File" rendered="#{hit.noHit}" id="hitNohit" /> <h:panelGrid columns="1" id="identGrid"> <a4j:commandLink action="#{searchResultsBean.displayDetails}" id="displayDetailsLink"> <h:outputText value="#{hit.lastName}," style="margin-right:1px;font-size:xx-small" id="lastName" /> <h:outputText value="#{hit.firstName}" style="font-size:xx-small" id="firstName" /> </a4j:commandLink> </h:panelGrid> </rich:panel> <rich:panel style="border:0px;margin:0px;align:right"> <a4j:commandLink action="#{searchResultsBean.displayDetails}" style="margin-right:2px;" id="displayDetailsIcon"> <h:graphicImage id="displayDetailsImage" alt="More Details" url="/images/more-details.JPG" style="border:0"/> </a4j:commandLink> <a4j:commandLink action="#{scenarioRecordBean.saveSingleStepScenario}" reRender="scenarioIdDisplay" id="oneStepScenarioLink" style="margin-right:2px;" immediate="true"> <h:graphicImage id="oneStepScenarioImage" alt="One Step Scenario" url="/images/oneStepScenario.JPG" style="border:0"/> </a4j:commandLink> <a4j:commandLink action="#{searchResultsBean.exportRawResponseForASingleRecord}" style="margin-right:2px;" id="rawExportIcon"> <h:graphicImage id="downLoadOrExport" alt="Export" url="/images/export.JPG" style="border:0"/> </a4j:commandLink> <a4j:commandLink action="#{searchResultsBean.editFile}" style="margin-right:2px;" rendered="#{not hit.noHit || (oneLineSearchBean.selectedDataSource=='transunion' && oneLineSearchBean.searchText != 'hit:N' && oneLineSearchBean.searchText != 'hit:n')}" id="editFileIcon"> <h:graphicImage id="editImage" alt="Edit" url="/images/copy-edit.JPG" style="border:0"/> </a4j:commandLink> <a4j:commandLink action="#{scenarioRecordBean.addToScenario}" id="addToScenarioIcon" reRender="messages"> <h:graphicImage id="addToScenarioImage" alt="Add To Scenario" url="/images/addToScenario.JPG" style="border:0"/> </a4j:commandLink> </rich:panel> <rich:panel style="border:0px;margin:0px" id="spacePanel"> <h:outputText value=" " id="space"/> </rich:panel> <rich:panel style="border:0px" id="addressPanel"> <h:panelGrid columns="1" border="0" id="addressGrid"> <h:outputText value="#{hit.ssn}" style="font-size:xx-small" id="ssn"/> <h:panelGroup id="addressPanelGroup"> <h:outputText value="#{hit.strtNum}" style="margin-right:1px;font-size:xx-small" id="streetNumber"/> <h:outputText value="#{hit.strtName}" style="margin-right:1px;font-size:xx-small" id="streetName"/> <h:outputText value="#{hit.strtType}," style="margin-right:1px;font-size:xx-small" id="streetType"/> <h:outputText value="#{hit.city}," style="margin-right:1px;font-size:xx-small" id="city"/> <h:outputText value="#{hit.state}," rendered="#{not hit.canadianAddress}" style="margin-right:1px;font-size:xx-small" id="state"/> <h:outputText value="#{hit.province}," rendered="#{hit.canadianAddress}" style="margin-right:1px;font-size:xx-small" id="province"/> <h:outputText value="#{hit.zip}" rendered="#{not hit.canadianAddress}" style="font-size:xx-small" id="zip"/> <h:outputText value="#{hit.postalCode}" rendered="#{hit.canadianAddress}" style="font-size:xx-small" id="postalCode"/> </h:panelGroup> </h:panelGrid> </rich:panel> <rich:panel id="scenarioIdDisplay" style="border:0px" rendered="#{searchResultsBean.renderScenarioId}"> <h:outputText value="#{scenarioRecordBean.contextualIdOfTheSavedScenario}" id="contextualId"/> </rich:panel> <rich:panel style="border:0px;margin:0px" id="emptyPanel"> <h:outputText value=" "/> </rich:panel> <rich:panel style="margin:0px; align:top;width:50%" id="scorePanel"> <h:panelGrid columns="1" border="0" style="height:4px;margin:0px" bgcolor="#70A0FF" cellspacing="0" cellpadding="0" width="#{hit.scoreAsString} %" id="scoreGrid"> <h:outputText id="hitBaer" value=""> </h:outputText> </h:panelGrid> </rich:panel> </h:panelGrid> </h:column> </rich:dataTable> </rich:panel> </a4j:form> </f:view> </div> </body> </html>