datatable标头中的selectBooleanCheckBox不调用actionListener [英] selectBooleanCheckBox in datatable header not calling actionListener
问题描述
我有一个包含三列的数据表,每列的标题中都有一个复选框.当我选择一个复选框时,我必须更新其他两个复选框.这些列下的每一行都是一个带有验证器的输入框.提交表单时,我可以看到验证程序正在执行,但是没有调用我的actionListener.也没有堆栈跟踪.请提出建议.
I have a datatable with three columns and a checkboxes in the header of each column. When I select one checkbox, I have to update the other 2 check boxes. Each row under these columns is an input box with a validator. When I submit the form, I can see the validators executing but my actionListener is not invoked. There is no stack trace as well. Please suggest.
<p:dataTable id="segmentRangeTable" var="rank"
value="#{segmentSetup.ranks}">
<p:column headerText="Segment Names">
<p:outputPanel layout="block">
<p:inputText id="segmentName" style="text-transform:uppercase"
value="#{segmentSetup.userSegment.segmentNames[rank].name}"
validator="#{segmentSetup.validateNames}" immediate="true" />
<p:message for="segmentName" />
</p:outputPanel>
</p:column>
<p:column>
<f:facet name="header">
<p:outputPanel layout="block">
<p:outputLabel value="AUM" />
<br />
<p:outputPanel id="AUMcheckBox">
<p:selectBooleanCheckbox itemLabel="Default Rating"
styleClass="defaultRating"
value="#{segmentSetup.defaultRating eq 'AUM' ? true : false}"
disabled="#{!segmentSetup.userSegmentTypesMap['AUM'].selected}" >
<p:ajax update=":tabView:clientSegmentationTabForm:segmentRangeTable:REREVcheckBox :tabView:clientSegmentationTabForm:segmentRangeTable:REVcheckBox :tabView:clientSegmentationTabForm:segmentRangeTable:AUMcheckBox" process="@this" immediate="true"
listener="#{segmentSetup.changeDefaultRating('AUM')}" />
</p:selectBooleanCheckbox>
</p:outputPanel>
</p:outputPanel>
</f:facet>
<p:inputText id="AUM" styleClass="AUM"
value="#{segmentSetup.userSegmentTypesMap['AUM'].segmentValues[rank].rangeMinValue}"
disabled="#{!segmentSetup.userSegmentTypesMap['AUM'].selected || (rank==fn:length(segmentSetup.ranks))}"
validator="#{segmentSetup.validateRanges}" immediate="true" >
<f:convertNumber maxFractionDigits="2" currencySymbol="$"
type="currency" minFractionDigits="0" />
</p:inputText>
<p:message for="AUM" />
</p:column>
<p:column>
<f:facet name="header">
<p:outputPanel>
<p:outputLabel value="GROSS REVENUE" />
<br />
<p:outputPanel id="REVcheckBox">
<p:selectBooleanCheckbox itemLabel="Default Rating"
styleClass="defaultRating"
value="#{segmentSetup.defaultRating eq 'GRRVN' ? true : false}"
disabled="#{!segmentSetup.userSegmentTypesMap['GRRVN'].selected}">
<p:ajax update=":tabView:clientSegmentationTabForm:segmentRangeTable:REREVcheckBox :tabView:clientSegmentationTabForm:segmentRangeTable:REVcheckBox :tabView:clientSegmentationTabForm:segmentRangeTable:AUMcheckBox" immediate="true"
listener="#{segmentSetup.changeDefaultRating('GRRVN')}">
</p:ajax>
</p:selectBooleanCheckbox>
</p:outputPanel>
</p:outputPanel>
</f:facet>
<p:outputPanel>
<p:inputText id="GRRVN" styleClass="GRRVN"
value="#{segmentSetup.userSegmentTypesMap['GRRVN'].segmentValues[rank].rangeMinValue}"
disabled="#{!segmentSetup.userSegmentTypesMap['GRRVN'].selected || (rank==fn:length(segmentSetup.ranks)) }"
validator="#{segmentSetup.validateRanges}" immediate="true" >
<f:convertNumber maxFractionDigits="2" currencySymbol="$"
type="currency" />
</p:inputText>
<p:message for="GRRVN" />
</p:outputPanel>
</p:column>
<p:column>
<f:facet name="header">
<p:outputPanel>
<p:outputLabel value="REC REVENUE" />
<br />
<p:outputPanel id="REREVcheckBox">
<p:selectBooleanCheckbox itemLabel="Default Rating"
styleClass="defaultRating"
value="#{segmentSetup.defaultRating eq 'RERVN' ? true : false}"
disabled="#{!segmentSetup.userSegmentTypesMap['RERVN'].selected}">
<p:ajax update=":tabView:clientSegmentationTabForm:segmentRangeTable:REREVcheckBox :tabView:clientSegmentationTabForm:segmentRangeTable:REVcheckBox :tabView:clientSegmentationTabForm:segmentRangeTable:AUMcheckBox" immediate="true"
listener="#{segmentSetup.changeDefaultRating('RERVN')}">
</p:ajax>
</p:selectBooleanCheckbox>
</p:outputPanel>
</p:outputPanel>
</f:facet>
<p:inputText id="RERVN" styleClass="RERVN"
value="#{segmentSetup.userSegmentTypesMap['RERVN'].segmentValues[rank].rangeMinValue}"
disabled="#{!segmentSetup.userSegmentTypesMap['RERVN'].selected || (rank==fn:length(segmentSetup.ranks)) }"
validator="#{segmentSetup.validateRanges}" >
<f:convertNumber maxFractionDigits="2" minFractionDigits="0"
currencySymbol="$" type="currency" />
</p:inputText>
<p:message for="RERVN" />
</p:column>
</p:dataTable>
<p:outputPanel layout="block" styleClass="blx-align-rl">
<p:commandButton id="saveButton" value="Save" process="@form"
update="@form" actionListener="#{segmentSetup.save}" >
<f:param name="VALIDATE" value="true" />
</p:commandButton>
<p:commandButton id="cancelButton" value="Cancel" update="@form"
actionListener="#{segmentSetup.reset}" immediate="true" />
</p:outputPanel>
推荐答案
我在尝试使用select状态呈现或不呈现另一个面板时遇到类似的问题.我基本上使用的是JSF 2和Richfaces. 最后,对我有用的是使用组件中的"onchange"并调用一个将我的面板属性更改为"none"和重要"的小js.
I was having a similar problem trying to use the select state to render or not render another panel. I am using basically JSF 2 and Richfaces. Finally what worked for me was use the "onchange" from the component and call a little js that changed my panel property for "none" and as "important".
它看起来几乎像这样:
<h:selectBooleanCheckbox
id="idCheck"
value="#{bean.hidePanel}"
onchange="changePanelView()">
</h:selectBooleanCheckbox>
还有js:
<script>
function changePanelView() {
if (document.getElementById('idForm:idCheck').checked) {
document.getElementById('idPanel').style.setProperty('display', '', 'important');
} else {
document.getElementById('idPanel').style.setProperty(
'display','none', 'important');
}
}
</script>
此页面已经使用了一些ajax技巧,但由于这种情况我重新绘制了面板,从而覆盖了"display"属性,因此我从这种情况下删除了
This page already use some ajax tricks but for I removed from this situation because it was re-rendering the panel, overwrinting the property "display"
这篇关于datatable标头中的selectBooleanCheckBox不调用actionListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!