【发布时间】:2019-03-03 04:40:02
【问题描述】:
我在一列中有 p:datatable 和 p:inputSwitch 表示“选定”行。我在 p:inputswitch 上触发 p:ajax 事件,其他行被监听器取消选择,当前行被选中。在我更新数据表的那个事件中,支持 bean 中的所有条目都有一个正确的值,开关打开,但它仍然是红色的。
<h:panelGroup layout="block" styleClass="ui-g-12 refinance" id="cotPanel">
<p:dataTable id="cot" value="#{cot.cods}" var="offer" reflow="true">
<p:column width="18%" headerText="OFFER">
<p:outputLabel value="#{offer.name}" />
</p:column>
<p:column headerText="AAA" width="18%" styleClass="num">
<p:outputLabel value="#{of:formatNumberDefaultForLocale(offer.aaa, 'nl_NL')}" />
</p:column>
<p:column headerText="BBB" width="18%">
<p:outputLabel value="#{offer.bbb}" />
</p:column>
<p:column headerText="CCC" width="18%" styleClass="num">
<p:outputLabel value="#{of:formatNumberDefaultForLocale(offer.ccc, 'nl_NL')}" />
</p:column>
<p:column headerText="DDD" width="18%" styleClass="num">
<p:outputLabel value="#{offer.ddd}" />
</p:column>
<p:column headerText="Select" width="10%">
<h:panelGroup styleClass="Width100 Flex">
<p:inputSwitch value="#{offer.selected}">
<p:ajax event="change" listener="#{cot.onSelectCod(offer)}" process="@this"
update="mainForm:cotPanel" />
</p:inputSwitch>
</h:panelGroup>
</p:column>
<p:column headerText="SELECTED" width="10%">
<p:outputLabel value="#{offer.selected}"/>
</p:column>
</p:dataTable>
</h:panelGroup>
在支持 bean 监听器中:
public void onSelectCod(Cod entry) {
if (entry.isSelected()) {
for (Cod codTemp : cods) {
if (!entry.equals(codTemp)) {
codTemp.setSelected(false);
}
}
}else {
// i dont let it become unselected if click on selected row, it becomes unselected only if it is clicked on another entry
entry.setSelected(true);
}
}
数据表中的最后一列显示所有值都是正确的,输入开关在右侧,但它是红色的。我也试图在选择的情况下编写一个“绿色”的风格,否则,否则“红色”,并且我在DOM中看到所有其他行得到正确的类,但选择的行不是。
【问题讨论】:
-
我看到你有静态的
styleClass属性,怎么能切换? -
即使我删除它也不会改变。
-
我的意思是,您的
red和green类应该在哪里设置为表格行?您不会告诉 JSF 这件事,至少在您在此处提供的代码中是这样。您只需更改selected属性值并更新面板。 -
我删除了它们,因为组件应该允许这样做,对吧?因为我更新了整个数据表。我把它们放在 p:inputSwitch 标签中,比如 styleClass="#{offer.selected ? 'green' : 'red'}"。但什么都没有。
-
最后这段代码是否更新了 DOM 中
inputSwitch的类?如果是,则可能是 CSS 问题(样式需要修复)。如果不是,那么这是与 JSF 相关的问题(未正确引用组件或任何验证错误)。如果第二种情况,我猜您的请求到达服务器并且正在处理onSelectCod(正如您在问题中所说的那样),那么您如何引用面板组件肯定有问题。
标签: jsf primefaces datatable