2013-11-23 4 views
3

<p:selectOneMenu>은 JSF 페이지가로드 될 때 영역 목록이 포함 된 데이터베이스에서 채워집니다.특정 유효성 검사가 위반 된 후 <p : selectOneMenu> 변경시 입력 구성 요소를 재설정하는 방법

이 메뉴의 영역을 선택하면 메뉴에서 선택한 영역으로 전송기로 전송할 제품 무게에 해당하는 요금을 사용자가 삽입 할 수있는 <p:inputText> 세트가 표시됩니다. 이것은 다음과 같이 표시 될 수 있습니다 snap shot.

enter image description here

알 수있는 바와 같이, 비 숫자 값이 사용자에 의해 입력되면, 검증 위반이 발생하면 (각 텍스트 필드의 상부에 표시된 번호는 중량에 대응) 버튼 <p:commandButton> 누르면 저장 주어지면 . 사용자가 현재 메뉴 영역 변경하면

은 - 상기 리셋 버튼을 누르지 않고 제 패널, 데이터 ( 리셋 버튼 follows으로 가압 만이 텍스트 필드에로드된다 새롭게 선택된 영역에 해당 항목 (영역) 메뉴에서 변경되는 경우

enter image description here

그래서 어떻게 이전의 검증을 위반 한 후 데이터를로드하는 .. 검증 위반)의 때문에?

<p:selectOneMenu>의 변경 이벤트는이 경우 <p:resetInput>과 같은 기능을 수행해야합니다.

희망을 말하면 내 뜻을 이해할 수 있습니다. :).

답변

8

<p:resetInput><p:ajax> 안에있는 기능이 기본적으로 <p:selectOneMenu>이어야합니다. <p:resetInput>UICommand 구성 요소와 같이 ActionSource을 구현하는 구성 요소에 있어야하므로 실제로 가능하지 않습니다.

가장 좋은 방법은 <p:remoteCommand><p:ajax> 변경 리스너 작업을 대신하도록하는 것입니다. 여기에 <p:resetInput>을 넣을 수 있습니다.

당신이 현재 가지고 상상해 :

<h:form> 
    <p:selectOneMenu id="zone"> 
     <f:selectItems ... /> 
     <p:ajax listener="#{bean.changeZone}" update="data" /> 
    </p:selectOneMenu> 

    <p:panel id="data"> 
     ... 
    </p:panel> 
</h:form> 

다음이 변화가 수행해야합니다

<h:form> 
    <p:selectOneMenu id="zone" onchange="changeZone()"> 
     <f:selectItems ... /> 
    </p:selectOneMenu> 
    <p:remoteCommand name="changeZone" process="@this zone" action="#{bean.changeZone}" update="data"> 
     <p:resetInput target="data" /> 
    </p:remoteCommand> 

    <p:panel id="data"> 
     ... 
    </p:panel> 
</h:form> 

리스너 방법에서 AjaxBehaviorEvent 인수를 제거하는 것을 잊지 마십시오. 어쨌든이 특별한 경우에는 쓸모가 없습니다.

+0

방금 ​​시도했습니다. 그것은 잘 작동했습니다. 대단히 감사합니다. – Tiny

+0

당신을 진심으로 환영합니다. – BalusC