Quando o usuário clica no selectBooleanCheckbox, capturo a mudança de valor no Bean através do atributo valueChangeListener
.
Dado uma condição, é possível que eu queira reverter a troca de valores, ou seja, se o usuário clicou para “checkar”, eu quero “descheckar”.
A parte do valueChangeListener
está tranquila.
O problema é o fato de propagar esse valor para view.
Conforme o exemplo acima, eu quero “setar” o valor dele para false
.
Faço isso no Bean (certeza, já debuguei para verificar se o valor estava sendo alterado de fato).
Consigo atualizar o growl
que está em outro form, mas não consigo atualizar o próprio componente.
Já tentei as formas:
-
update="@this"
; -
process="@this"
; event="change" update="@this"
Nenhuma funcionou.
Seguem os códigos:
View:
<h:panelGrid columns="2" cellpadding="2" style="margin-left: -5px;">
<p:selectBooleanCheckbox id="myValue"
value="#{bean.myPropertyVO.myValue}"
valueChangeListener="#{bean.changeListener}">
<p:ajax update=":growlForm" />
</p:selectBooleanCheckbox>
<h:outputLabel value="#{msg.myMessage}" for="myValue" />
</h:panelGrid>
Bean:
public void changeListener(final ValueChangeEvent event) throws MyException {
final MyType changedComponent = MyType
.getByName(event.getComponent().getId());
if((Boolean) event.getNewValue()) {
if(isCondition()) {
//na chamada do método myMethod eu seto o valor da propriedade para false
this.business.myMethod(
this.myPropertyVO, changedComponent, false);
return;
}
this.myList.add(changedComponent);
} else {
this.myList.remove(changedComponent);
}
}
Agradeço desde já!