2014-10-07 5 views
1

У меня есть h: selectBooleanCheckbox, который я бы хотел проверить внутри управляемого компонента, прежде чем позволить ему изменить его значение.Предотвратить selectBooleanCheckbox от изменения значения

<h:selectBooleanCheckbox id="attr" value="#{handler.attribute}" onclick="submit()" 
    immediate="true" valueChangeListener="#{handler.changeAttributeValue}" /> 

public String changeAttributeValue(ValueChangeEvent event) { 
    if(condition) 
     attribute=false; 
return "home"; 
} 

Так что я хотел бы сделать это, чтобы атрибут не стал истинным, если условие истинно. Случается, что сначала атрибуту присваивается значение false, но после выхода метода он снова становится истинным.

+0

Таким образом, вы имеете в виду [JSF валидатор] (HTTP: // WWW. mkyong.com/jsf2/custom-validator-in-jsf-2-0/) – kolossus

ответ

1

Будьте осторожны с immediate="true". Представленное значение не будет принято вашим attribute, но останется в модели компонента компонента selectBooleanCheckbox, поэтому в следующий раз окно будет проверено. Попробуйте immediate=false. Убедитесь, что ваш управляемый компонент @SessionScoped, иначе он забудет ваш атрибут при повторной загрузке/перенаправлении страницы.

Еще более красивый:

<h:selectBooleanCheckbox id="attr" value="#{handler.attribute}"> 
    <f:ajax event="change" render="@this" listener="#{handler.changeAttributeValue()}" /> 
</h:selectBooleanCheckbox> 

public void changeAttributeValue() { 
if(condition) 
    attribute=false; 
return; 
} 

(Не удалось проверить код сразу знаю, но использовал это довольно часто)

Смежные вопросы