Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 3.3
-
Fix Version/s: 4.0.BETA, EE-3.3.0.GA_P02, 4.0
-
Component/s: ACE-Components
-
Labels:None
-
Environment:Tomcat 7
-
Assignee Priority:P1
-
Salesforce Case Reference:
-
Affects:Compatibility/Configuration
Description
The rowSelectListener method is not executed / silently fails when the ace:dataTable contains cells that fail validation/conversion. According to the ace:datatable tld "Decoding children during feature requests can result in unwanted input submission (during pagination for example), so by default this component suppresses child decoding whenever submitting itself." The rowSelectListener appears to be decoding components in the ace:dataTable.
To re-create this issue, modify dataTableListener.xhtml name column to the following:
<ace:column id="name" headerText="Name">
<h:inputText id="nameCell"
value="#{car.name}"
required="true"
size="7">
<f:ajax execute="@this" render="@this" />
</h:inputText>
</ace:column>
Add a System.out.println to DataTableListener selectListener method.
When you select rows, you will see the selectListener method executed. Empty one of the name cells (which has required="true") and try selecting a row. You will see the row selection style applied in the browser, but the selectListener will not be executed on the server.
To re-create this issue, modify dataTableListener.xhtml name column to the following:
<ace:column id="name" headerText="Name">
<h:inputText id="nameCell"
value="#{car.name}"
required="true"
size="7">
<f:ajax execute="@this" render="@this" />
</h:inputText>
</ace:column>
Add a System.out.println to DataTableListener selectListener method.
When you select rows, you will see the selectListener method executed. Empty one of the name cells (which has required="true") and try selecting a row. You will see the row selection style applied in the browser, but the selectListener will not be executed on the server.
What Brad is observing is that the selection state change is performed during decode, while the rowSelectListener is broadcast in some later phase. Since a table child input component fails validation, that later event broadcast phase is skipped like all other phases following validation failure, resulting in the selection occurring but no listener being processed.
I will be moving the processing of row selection state changes into the updateModel phase.