У меня есть p: datatable и p: inputSwitch в одном столбце, который указывает «выбранную» строку.Я запускаю событие p: ajax на p: inputwitch, и другие строки становятся невыбранными слушателем, и текущая строка становится выбранной.В этом событии я обновляю datatable, все записи в компоненте поддержки имеют правильные значения, переключатель включен, но он все еще красный.
<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>
и в слушателе компонента поддержки:
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);
}
}
Последний столбец в datatable показывает, что все значения правильные, входной переключатель находится справа, но он красный.Я также попытался написать styleClass, который будет «зеленым», если выбрано «истина», и «красным» в противном случае, и я вижу в DOM, что все остальные строки получают правильный класс, но не выбранная строка.
![enter image description here](https://i.stack.imgur.com/n34kd.gif)