This content has been marked as final.
Show 3 replies
-
1. Re: rich:datatable value evaluated when rendered="false"
ilya_shaikovsky Aug 24, 2010 4:36 AM (in response to lees)show the code please.
-
2. Re: rich:datatable value evaluated when rendered="false"
lees Aug 31, 2010 10:59 AM (in response to ilya_shaikovsky)Included two files plus partial stack trace. First xhtml file includes the second and contains several subviews that have rendered attributes. The second file is the one that contains the rich:dataTable with value being evaluated when rendered is false. The stack trace error message is consistent with the use case showing attempted evaluation on non-existent property.
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jstl/core" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:t="http://myfaces.apache.org/tomahawk" xmlns:v="http://corejsf.com/validator" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich" xmlns:mf="http://pbo.unavco.org/mdm"> <ui:composition> <h3>#{text['equipmentDetail.standardInformation']}</h3> <a4j:region> <h:panelGrid> <t:htmlTag value="fieldset"> <!-- station --> <f:subview id="stationView" rendered="#{equipmentForm.equipment.station != null}"> <h:outputLabel styleClass="desc" for="station" value="#{text['equipment.station']}" /> <a href="/mdm/spring/station-flow?stationId=#{equipmentForm.equipment.station.id}"> <h:outputText id="station" styleClass="text medium" value="#{equipmentForm.equipment.station.name}" /> </a> </f:subview> <f:subview id="noStationView" rendered="#{equipmentForm.equipment.station == null}"> <h:outputLabel styleClass="desc" for="station" value="#{text['equipment.station']}" /> <h:outputText id="station" styleClass="text medium" value="#{text['equipmentDetail.noStation']}" /> </f:subview> <!-- idUNAVCO --> <mf:inputText label="#{text['equipment.idUNAVCO']}" entity="#{equipmentForm.equipment}" property="idUNAVCO"> <mf:validate entity="#{equipmentForm.equipment}" property="idUNAVCO" /> </mf:inputText> <!-- manufacturer --> <mf:selectOneMenu label="#{text['equipment.manufacturer']}" entity="#{equipmentForm.equipment}" property="manufacturer" required="false" items="#{selectItemLookup.allManufacturers}"> </mf:selectOneMenu> <!-- model --> <mf:inputText label="#{text['equipment.model']}" entity="#{equipmentForm.equipment}" property="model"> <mf:validate entity="#{equipmentForm.equipment}" property="model" /> </mf:inputText> <!-- serialNumber --> <mf:inputText label="#{text['equipment.serialNumber']}" entity="#{equipmentForm.equipment}" property="serialNumber"> <mf:validate entity="#{equipmentForm.equipment}" property="serialNumber" /> </mf:inputText> <!-- project --> <mf:inputText label="#{text['equipment.project']}" entity="#{equipmentForm.equipment}" property="project" readonly="true" required="false"> <mf:validate entity="#{equipmentForm.equipment}" property="project" /> </mf:inputText> <p></p> <h:outputText value="#{text['timer.timedEquipment.label']}" style="font-weight: bold; font-size: 110%"/> <t:div rendered="#{equipmentForm.equipment.timer != null}" > <h:outputLink value="equipmentForm.html" immediate="true"> <h:outputText value="#{equipmentForm.equipment.timer.idUNAVCO}" style="font-weight: bold"/> <f:param name="id" value="#{equipmentForm.equipment.timer.id}" /> </h:outputLink> <h:outputText value=" #{text['timer.timedEquipment.instr']}" /> </t:div> <t:div rendered="#{equipmentForm.equipment.timer == null}" > <h:outputText value="#{text['timer.timedEquipment.noTimer']}" /> </t:div> <br/> <!-- remarks --> <mf:inputTextarea label="#{text['equipment.remarks']}" entity="#{equipmentForm.equipment}" property="remarks" required="false"> <mf:validate entity="#{equipmentForm.equipment}" property="remarks" /> </mf:inputTextarea> </t:htmlTag> </h:panelGrid> <!-- TcpIp interfaces --> <h3>#{text['equipmentDetail.tcpIp']} <mf:hint name="TcpIPHint" id="TcpIPHint" output="#{text['equipment.tcpIp.hint']}"> <h:outputText value="#{text['equipment.tcpIp.hint']}"/> </mf:hint> </h3> <h:panelGrid id="tcpGrid" lang="table"> <t:htmlTag value="fieldset"> <h:panelGroup id="tcpIps" rendered="#{not empty equipmentForm.equipment.tcpIps}"> <t:dataTable id="tcpIpTable" var="tcpIp" style="margin-top: 10px" value="#{equipmentForm.equipment.tcpIps}" styleClass="scrollerTable table" headerClass="standardTable_Header" rowClasses="standardTable_Row1,standardTable_Row2" columnClasses="standardTable_Column,standardTable_Column,standardTable_Column,standardTable_Column,standardTable_Column" > <t:column> <f:facet name="header"> <h:outputText value="#{text['tcpIp.interfaceLabel']}" /> </f:facet> <mf:inputText entity="#{tcpIp}" property="interfaceLabel" required="false"> <mf:validate entity="#{tcpIp}" property="interfaceLabel" /> </mf:inputText> </t:column> <t:column> <f:facet name="header"> <h:outputText value="#{text['tcpIp.ipAddress']}" /> </f:facet> <mf:inputText entity="#{tcpIp}" property="ipAddress" required="false"> <mf:validate entity="#{tcpIp}" property="ipAddress" /> </mf:inputText> </t:column> <t:column> <f:facet name="header"> <h:outputText value="#{text['tcpIp.hostname']}" /> </f:facet> <mf:inputText entity="#{tcpIp}" property="hostname" required="false"> <mf:validate entity="#{tcpIp}" property="hostname" /> </mf:inputText> </t:column> <t:column> <f:facet name="header"> <h:outputText value="#{text['tcpIp.domainname']}" /> </f:facet> <mf:inputText entity="#{tcpIp}" property="domainname" required="false"> <mf:validate entity="#{tcpIp}" property="domainname" /> </mf:inputText> </t:column> <t:column> <f:facet name="header"> <h:outputText value="#{text['tcpIp.netmask']}" /> </f:facet> <mf:inputText entity="#{tcpIp}" property="netmask" required="false"> <mf:validate entity="#{tcpIp}" property="netmask" /> </mf:inputText> </t:column> <t:column> <f:facet name="header"> <h:outputText value="#{text['tcpIp.gateway']}" /> </f:facet> <mf:inputText entity="#{tcpIp}" property="gateway" required="false"> <mf:validate entity="#{tcpIp}" property="gateway" /> </mf:inputText> </t:column> <t:column> <f:facet name="header"> <h:outputText value="#{text['tcpIp.dataAccessCount']}" /> </f:facet> <h:outputText id="dataAccessorCount" value="#{fn:length(tcpIp.dataAccessors)}" rendered="#{not empty tcpIp.dataAccessors}"/> </t:column> <t:column> <a4j:commandLink immediate="true" id="removeTcpIp" value="#{text['equipmentDetail.tcpIp.remove']}" action="#{equipmentForm.removeTcpIp}" reRender="tcpGrid"> <t:updateActionListener property="#{equipmentForm.tcpIpToRemove}" value="#{tcpIp}" /> </a4j:commandLink> </t:column> </t:dataTable> </h:panelGroup> <h:panelGroup id="noTcpIps" rendered="#{empty equipmentForm.equipment.tcpIps}"> <h:outputText value="#{text['equipment.noTcpIps']}"/> <br/> </h:panelGroup> <a4j:commandLink immediate="true" id="addTcpIp" value="#{text['equipmentDetail.tcpIp.add']}" action="#{equipmentForm.addTcpIp}" reRender="tcpGrid"/> </t:htmlTag> </h:panelGrid> </a4j:region> <!-- Type-specific attributes of equipment. --> <f:subview id="typeSpecificView"> <!-- Could be a GPS receiver --> <f:subview id="gpsReceiverView" rendered="#{equipmentForm.equipment.equipmentType.type == 'GpsReceiver'}"> <ui:include src="equipmentFormGpsReceiverElements.xhtml"> <ui:param name="gpsReceiverBean" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> <!-- Could be a CDMA --> <f:subview id="cdmaView" rendered="#{equipmentForm.equipment.equipmentType.type == 'Cdma'}"> <ui:include src="equipmentFormCdmaElements.xhtml"> <ui:param name="cdmaBean" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> <!-- Could be a VSAT Receiver --> <f:subview id="vsatReceiverView" rendered="#{equipmentForm.equipment.equipmentType.type == 'VsatReceiver'}"> <ui:include src="equipmentFormVsatReceiverElements.xhtml"> <ui:param name="vsatReceiverBean" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> <!-- Could be a Radio --> <f:subview id="radioView" rendered="#{equipmentForm.equipment.equipmentType.type == 'Radio'}"> <ui:include src="equipmentFormRadioElements.xhtml"> <ui:param name="radioBean" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> <!-- Could be a rain gauge --> <f:subview id="rainGauge" rendered="#{equipmentForm.equipment.equipmentType.type == 'RainGauge'}"> <ui:include src="equipmentFormRainGaugeElements.xhtml"> <ui:param name="rainGaugeBean" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> <!-- Could be a tiltmeter --> <f:subview id="tiltmeter" rendered="#{equipmentForm.equipment.equipmentType.type == 'Tiltmeter'}"> <ui:include src="equipmentFormTiltmeterElements.xhtml"> <ui:param name="tiltmeterBean" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> <!-- Could be a Pore Pressure Monitor --> <f:subview id="porePressureMonitor" rendered="#{equipmentForm.equipment.equipmentType.type == 'PorePressureMonitor'}"> <ui:include src="equipmentFormPorePressureMonitorElements.xhtml"> <ui:param name="porePressureMonitorBean" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> <!-- Could be a weather station --> <f:subview id="weatherStation" rendered="#{equipmentForm.equipment.equipmentType.type == 'WeatherStation'}"> <ui:include src="equipmentFormWeatherStationElements.xhtml"> <ui:param name="weatherStationBean" value="#{equipmentForm.equipment}"/> </ui:include> </f:subview> <!-- Could be a gtsm RT Board --> <f:subview id="rtBoard" rendered="#{equipmentForm.equipment.equipmentType.type == 'GtsmRtBoard'}"> <ui:include src="equipmentFormRtBoardElements.xhtml"> <ui:param name="rtBoardBean" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> <f:subview id="gtsmStrainmeter" rendered="#{equipmentForm.equipment.equipmentType.type == 'GtsmBoreholeStrainmeter'}"> <ui:include src="equipmentFormGtsmStrainmeter.xhtml"> <ui:param name="gtsmStrainmeter" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> <!-- Could be an Choke Ring Antenna --> <f:subview id="chokeRingAntenna" rendered="#{equipmentForm.equipment.equipmentType.type == 'ChokeRingAntenna'}"> <ui:include src="equipmentFormAntennaElements.xhtml"> <ui:param name="antenna" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> <!-- Could be an Zephyr Antenna --> <f:subview id="zephyrAntenna" rendered="#{equipmentForm.equipment.equipmentType.type == 'ZephyrAntenna'}"> <ui:include src="equipmentFormAntennaElements.xhtml"> <ui:param name="antenna" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> <f:subview id="timer" rendered="#{equipmentForm.equipment.equipmentType.type == 'Timer'}"> <ui:include src="equipmentFormTimerElements.xhtml"> <ui:param name="timer" value="#{equipmentForm.equipment}" /> </ui:include> </f:subview> </f:subview> <mf:viewStationLink formId="${formId}"/> </ui:composition> </html>
This is equipmentFormTimerElements.xhtml
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jstl/core" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:t="http://myfaces.apache.org/tomahawk" xmlns:v="http://corejsf.com/validator" xmlns:rich="http://richfaces.org/rich" xmlns:a4j="http://richfaces.org/a4j" xmlns:mf="http://pbo.unavco.org/mdm"> <ui:composition> <a4j:region> <rich:panel> <f:facet name="header"> <h:outputText value="#{text['timer.valuesEntryHeader']}"/> </f:facet> <rich:dataTable value="#{timer.timerOnPeriods}" var="timerOnPeriod" rules="rows" border="2" id="timerPeriodTable" > <rich:column> <f:facet name="header"> <h:outputText value="#{text['timer.timerOnPeriod.dayHeader']}"/> </f:facet> <h:selectOneMenu value="#{timerOnPeriod.day}" required="true" id="timerDaySelect"> <f:selectItem itemValue="" itemLabel="Select day of week..." itemDisabled="true" /> <f:selectItems value="#{selectItemLookup.daysOfWeek}" /> </h:selectOneMenu> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="#{text['timer.timerOnPeriod.startTimeHeader']} #{text['timer.timerOnPeriod.format']}"/> </f:facet> <h:inputText value="#{timerOnPeriod.startTime}" maxlength="5" required="true"> <f:convertDateTime pattern="HH:mm" type="time" timeZone="UTC"/> </h:inputText> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="#{text['timer.timerOnPeriod.stopTimeHeader']} #{text['timer.timerOnPeriod.format']}"/> </f:facet> <h:inputText value="#{timerOnPeriod.endTime}" maxlength="5" required="true"> <f:convertDateTime pattern="HH:mm" type="time" timeZone="UTC"/> </h:inputText> </rich:column> <rich:column> <a4j:commandLink immediate="true" id="removeTimerOnPeriod" action="#{equipmentForm.removeTimerOnPeriod}" reRender="timerPeriodTable"> <h:graphicImage value="/images/delete.gif" style="border:0"/> <t:updateActionListener property="#{equipmentForm.timerOnPeriodToRemove}" value="#{timerOnPeriod}" /> </a4j:commandLink> </rich:column> </rich:dataTable> <a4j:commandButton immediate="true" id="addTimerOnPeriod" value="#{text['timer.timerOnPeriod.addButton']}" action="#{equipmentForm.addTimerOnPeriod}" reRender="timerPeriodTable"/> </rich:panel> <br/> <rich:panel> <f:facet name="header"> <h:outputText value="#{text['timer.timedEquipmentHeader']}"/> </f:facet> <rich:dataTable value="#{timer.timedEquipment}" var="eqp" border="2" rows="0" id="eqpTable" frame="border"> <rich:column> <f:facet name="header"> <h:outputText value="#{text['equipment']} (click image to edit equipment)."/> </f:facet> <h:outputLink id="editEquipmentForm" immediate="true" value="equipmentForm.html"> <f:param name="id" value="#{eqp.id}" /> <h:graphicImage url="#{eqp.equipmentCatalog.smallImageUrl}" id="eqpImage" style="position:relative; left: 3-px"/> </h:outputLink> <br/> <h:outputText value="#{text[eqp.equipmentType.labelKey]}"/> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="#{text['equipment.idUNAVCO']}" /> </f:facet> <h:outputText value="#{eqp.idUNAVCO}" id="unavcoId"/> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="#{text['equipment.serialNumber']}" /> </f:facet> <h:outputText value="#{eqp.serialNumber}" id="serialNum"/> </rich:column> <rich:column> <a4j:commandLink immediate="true" id="removeTimedEquipment" action="#{equipmentForm.removeTimedEquipment}" reRender="eqpTable"> <h:graphicImage value="/images/delete.gif" style="border:0" /> <t:updateActionListener property="#{equipmentForm.timedEquipmentToRemove}" value="#{eqp}" /> </a4j:commandLink> </rich:column> </rich:dataTable> <style> .status { font-weight: bold; color: red; } </style> <t:div > <t:panelGrid columns="1" > <t:panelGroup > <h:outputLabel for="timedEquipmentId" value="Select additional station equipment to be controlled by this timer." styleClass="desc" /> <br/> <h:inputText id="timedEquipmentId" style="margin:0px" value="#{equipmentForm.newTimedEquipUnavcoId}" required="false"/> <h:graphicImage value="/images/selectArrow.png" onclick="#{rich:component('timedEquipSuggestionId')}.callSuggestion(true)" alt="" /> <rich:toolTip for="#{selectorId}" showDelay="500" value="#{text['timer.selectTimedEquipInstr']}" hideDelay="10"/> </t:panelGroup> </t:panelGrid> <rich:message for="timedEquipmentId" styleClass="fieldError" /> <rich:suggestionbox height="200" width="300" suggestionAction="#{equipmentForm.getPotentialTimedEquipment}" var="equipment" for="timedEquipmentId" fetchValue="#{equipment.idUNAVCO}" minChars="2" nothingLabel="No available equipment" id="timedEquipSuggestionId"> <a4j:support event="onselect" action="#{equipmentForm.findNewTimedEquipment}" reRender="eqpTable" /> <rich:column> <h:graphicImage value="#{equipment.smallImageUrl}" /> <br/> <h:outputText value="#{text[equipment.equipmentType.labelKey]}" /> </rich:column> <rich:column> <h:outputText value="#{equipment.idUNAVCO}"/> </rich:column> <rich:column> <h:outputText value="#{equipment.serialNumber}"/> </rich:column> </rich:suggestionbox> </t:div> </rich:panel> </a4j:region> </ui:composition> </html>
stack trace -
Caused by: javax.el.PropertyNotFoundException: /equipmentFormTimerElements.xhtml @20,124 value="#{timer.timerOnPeriods}": Property 'timerOnPeriods' not found on type org.unavco.pbo.mdm.equipment.model.Cdma at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:73) at javax.faces.component.UIData.getValue(UIData.java:1054) at org.ajax4jsf.component.UIDataAdaptorBase.getValue(UIDataAdaptorBase.java:1647) at org.ajax4jsf.component.SequenceDataAdaptor.getDataModel(SequenceDataAdaptor.java:65) at org.ajax4jsf.component.SequenceDataAdaptor.createDataModel(SequenceDataAdaptor.java:59) at org.richfaces.component.UIDataTable.createDataModel(UIDataTable.java:121) at org.ajax4jsf.component.UIDataAdaptorBase.getExtendedDataModel(UIDataAdaptorBase.java:621) at org.ajax4jsf.component.UIDataAdaptorBase.getRowIndex(UIDataAdaptorBase.java:311) at javax.faces.component._ComponentUtils.idsAreEqual(_ComponentUtils.java:134) at javax.faces.component._ComponentUtils.findComponent(_ComponentUtils.java:110) at javax.faces.component._ComponentUtils.findComponent(_ComponentUtils.java:107) at javax.faces.component._ComponentUtils.findComponent(_ComponentUtils.java:107) at javax.faces.component.UIComponentBase.findComponent(UIComponentBase.java:449) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:230) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:245) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:245) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:245) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:245) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:245) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:245) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:245) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:245) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.getOutputLabelMap(HtmlMessageRenderer.java:212) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.findInputLabel(HtmlMessageRenderer.java:156) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.getSummary(HtmlMessageRenderer.java:94) at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlMessageRendererBase.renderSingleFacesMessage(HtmlMessageRendererBase.java:123) at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlMessageRendererBase.renderMessage(HtmlMessageRendererBase.java:108) at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlMessageRendererBase.renderMessage(HtmlMessageRendererBase.java:63) at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.encodeEnd(HtmlMessageRenderer.java:59) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:624) ... 109 more
-
3. Re: rich:datatable value evaluated when rendered="false"
ilya_shaikovsky Sep 1, 2010 6:00 AM (in response to lees)made simple check with next code
<a4j:outputPanel rendered="false"> <rich:dataTable align="center" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'" cellpadding="0" cellspacing="0" width="700" border="0" var="record" value="#{report.expReport.records}"> ///table content </rich:dataTable> </a4j:outputPanel> <a4j:commandButton value="submit"></a4j:commandButton> </h:form>
and the table value binding not getting called neither on initial rendering nor afte clicking the button using RF 3.3.3.Final.