2013-07-18 2 views
1

사용자가 목록에서 "없음"항목을 ​​선택하지 못하게하기 위해 selectOneMenu에 대해 유효성을 검사했습니다. JSF selectOneMenu 유효성 검사 및 아약스 렌더링

<h:selectOneMenu id="selectMenu" value="#{bean.selectedValue}" required="true" requiredMessage="Please select an item"> 
    <f:ajax render="toRender selectMenuMessage" listener="#{bean.onSelect}"/> 
    <f:selectItem itemLabel="None" noSelectionOption="true"/> 
    <f:selectItems value="#{bean.items}" var="item" itemValue="#{item.id}" itemLabel="#{item.label}"/> 
</h:selectOneMenu> 

나는 나의 항목이 "없음"하지 않을 경우에만 보여 내 아래 패널 찾는 있습니다. "None"을 선택하면 메시지가 렌더링되고 패널이 사라집니다.

<h:panelGroup id="toRender"> 
    <h:panelGrid rendered="#{bean.selectedValue == 0 ? false : true"> 
     ... 
    </h:panelGrid> 
</h:panelGroup> 

유효성 검사없이 작동하지만 두 작업을 모두 할 수 없습니다. 유효성 검사가 렌더링을 방해하는 것과 같습니다.

의견이 있으십니까? 감사

답변

1

내가 bean.selectedValue이 정수라고 생각, 그래서이 시도 :

<f:selectItem itemValue="0" itemLabel="None" noSelectionOption="true"/> 


편집 : 아 죄송합니다, 나는 당신의 문제를 조금 오해 생각합니다.
여기에서 문제는 selectOneMenu 값을 더 requiering하는 경우 값이 비어 있으면 값이 제출되지 않는다는 것입니다. noSelectionOption="true"의 항목을 선택하면 항목이 비어있는 것으로 처리되므로 아무 값도 제출되지 않습니다. bean.selectedValue == 0을 확인하는 경우 selectedValue은 처음에는 0 일 것입니다. 0으로 항목을 선택하면 위에 설명 된 것처럼 제출되지 않으므로 0이됩니다.
맞습니다. 유효성 확인과 bean.selectedValue == 0에 대한 수표는 함께 사용할 수 없습니다. 유효성 검사를 제거하는 것이 좋습니다.
이것이 옵션이 아니면 더 자세히 설명하는 이유를 설명해주십시오. 나는 반응을

+0

아무 것도 변경되지 않습니다. (requiredMessage btw 대신 converterMessage를 선택하면) 메시지가 나타나지만 렌더링이 시작되지 않고 내 panelGrid가 사라지지 않습니다. –

+0

편집 해 주셔서 감사합니다. 이번에는 잘 알고 있습니다. 그렇다면 제출 후 유효성 검사와 렌더링 사이를 선택하는 것이 해결책입니다. –

0

, 그것은 해결책은 아니지만이

<h:selectOneMenu id="selectMenu" value="#{bean.selectedValue}"> 
    <f:ajax render="toRender selectMenuMessage" listener="#{bean.onSelect}"/> 
    <f:selectItem itemLabel="None" noSelectionOption="true"/> 
    <f:selectItems value="#{bean.items}" var="item" itemValue="#{item.id}" itemLabel="#{item.label}"/> 
</h:selectOneMenu> 

...이 작업을 수행하는 또 다른 방법입니다 그리고 빈에서

public void onSelect() { 
    if(this.selectedValue != 0) { 
     // Do smthg here 
    } else { 
     // Display error message 
     UIComponent component = Outils.getFacesContext().getViewRoot().findComponent(":form:selectMenu"); 
     if(component != null) { 
      Outils.getFacesContext().addMessage(component.getClientId(), new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Test msg")); 
     } 
    }  
} 

검증 과정이 시작되지 않습니다 방법 및 확인은 bean에서 수행됩니다.

누군가가 더 나은 것을 발견하면 알려주세요!

+0

내 대답이 업데이트되었습니다. 지금 문제가 있는지 확인하십시오. – user1983983