2014-10-07 3 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"; 
} 

그래서 내가하고 싶은 것은 조건이 true이면 속성이 참이되지 않도록하는 것입니다. 속성은 처음에는 false로 설정되지만 메소드가 종료 된 후에는 다시 true가됩니다.

+0

그래서, 당신은 [JSF 검증]을 의미합니다 (HTTP : // WWW. mkyong.com/jsf2/custom-validator-in-jsf-2-0/) – kolossus

답변

1

immediate="true"과 조심하십시오. 제출 된 값은 attribute에 의해 처리되지 않지만 selectBooleanCheckbox - 구성 요소의 구성 요소 모델에 머물러 있으므로 다음에 상자가 다시 확인됩니다. 시도해보십시오 immediate=false. 관리 Bean이 @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; 
} 

(오른쪽 알고있는 코드를 확인하지만, 매우 자주 사용 할 수 없습니다)

관련 문제