2012-06-06 2 views
3

내가 값에 브레이크 포인트를 넣어 한업데이트 양식

<p:spinner id="spin1" min="1" max="#{editPhoto.max}" size="1" 
      value="#{editPhoto.page}" validator="#{editPhoto.validator()}" 
      valueChangeListener="#{editPhoto.refreshForm()}" /> 
<p:commandButton value="Insert" action="#{editPhoto.insertImage()}" /> 
<p:commandButton value="Delete" action="#{editPhoto.deleteImage()}" /> 

스피너, setPage의 변화에 ​​기초뿐만 아니라 발리에서 내 양식을 업데이트하려고 및 valueChangeListener를 사용하면 commandButton을 누를 때 만 나타납니다. 즉시 = "true"를 시도했지만 아무 것도 추가하지 않습니다. 내가 정말로 원하는 것은 값이 변경되었을 때 commandButton을 누르지 않고 알 수 있습니다. 이전 question BalusC에서

내가 여기에 비슷한 필요하다고 생각

<f:event type="preRenderView" listener="#{nextpageBacking.onPreRenderView}" /> 

의 사용을 제안하지만, 이벤트의 어떤 종류의 난이 찾고있는 사람이되어야 하는가? 아마 commandButton을 누르지 않고도 스피너에서 변경 사항을 얻으려면 어떻게해야합니까? 감사, 일란

내 콩은 뷰 범위입니다. 아마도 다른 요청 범위 bean을 사용하고 요청 범위 bean이보기 범위 Bean에서 작동하도록하는 것일 수도 있습니다. 이것이 올바른 방향으로 보인다면 나는 이것을 시도 할 것이다.

답변

4

f:ajax 또는 p:ajax을 사용해야합니다.

valueChangeListener는 전체 양식 또는 회 전자가 제출 될 때만 실행됩니다.

<p:spinner id="spin1" min="1" max="#{editPhoto.max}" size="1" 
      value="#{editPhoto.page}" validator="#{editPhoto.validator()}"> 
    <p:ajax listener="#{editPhoto.refreshForm()}" 
      update="@form" process="@this" /> 
</p:spinner> 

회 전자의 valueChangeListener 속성은 당신의 방법을 발사하는 가장 좋은 장소가 아니다. listener 속성이 p:ajax 인 것이 좋습니다. 새 값인 에 관심이있는 경우 valueChangeListener를 사용해야합니다.

+0

또한 Primefaces의 쇼케이스에는 Ajax Spinner의 예제가 있습니다. http://www.primefaces.org/showcase/ui/spinner.jsf –

+0

절대적으로 아름답습니다. 대답을 알면 너무 간단합니다. 나는 그저 존재했던 validator를 제거하여 break point를 잡을 수있을 것이다. 또한 나는 당신의 bean refreshForm이해야만했던 폼을 업데이트하는 것을 본다. 아마 나는이 경우 청취자조차 필요하지 않습니다. 아름다운 답변 주셔서 감사합니다. –

+1

예제에서'process' 속성은'@ this'로 설정되어 있습니다. 따라서 스피너 변경은 스피너 자체의 변경 사항 만 반영합니다. 그러나 그것을 '@ form'으로 변경할 수도 있습니다. 일반적으로 폼을 새로 고치는 용도로만 리스너 함수가 필요하지 않습니다. –