문제

클릭하면 페이지에서 특정 다른 양식 필드를 추가/제거하는 확인란을 갖고 싶은 JSF 페이지가 있습니다.현재 확인란에 대해 가지고 있는 (단순화된) 코드는 다음과 같습니다.

<h:selectBooleanCheckbox title="showComponentToReRender" value="#{backingBean.showComponentToReRender}">
    <a4j:support event="onsubmit" reRender="componentToReRender" />
</h:selectBooleanCheckbox>

숨기려는 구성요소의 코드는 다음과 같습니다.

<h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 &amp;&amp; backingBean.showComponentToReRender}">
   <s:selectItems value="#{valuesList}" var="value"/>
</h:selectOneMenu>

현재는 확인란을 클릭해도 아무런 작업이 수행되지 않습니다."selectOneMenu"는 사라지지 않을 것입니다.내가 도대체 ​​뭘 잘못하고있는 겁니까?

도움이 되었습니까?

해결책

포장을 하셔야 합니다 componentToReRender 다음 중 하나에서:

<h:panelGroup id="componentToReRenderWrapper">

또는

<a4j:outputPanel id="componentToReRenderWrapper">

따라서 효과적으로 다음을 갖게 됩니다.

<h:panelGroup id="componentToReRenderWrapper">
    <h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 &amp;&amp; backingBean.showComponentToReRender}">
       <s:selectItems value="#{valuesList}" var="value"/>
    </h:selectOneMenu>
</h:panelGroup>

그리고 변경 reRender="componentToReRenderWrapper" 당신이 사용하는 경우 panelGroup, 또는 해당 속성을 사용하는 경우 해당 속성을 제거하십시오. outputPanel.

정확한 설명을 찾아보니 리치페이스 문서:

reRender 사용 시 가장 일반적인 문제는 "rendered" 속성이 있는 구성 요소를 가리키는 것입니다.JSF는 "렌더링된" 조건이 false를 반환하는 경우 구성 요소의 결과가 배치되어야 하는 브라우저 DOM의 위치를 ​​표시하지 않습니다.따라서 Ajax 요청 중에 구성 요소가 렌더링된 후 RichFaces는 렌더링된 코드를 클라이언트에 전달하지만 업데이트 위치를 알 수 없기 때문에 페이지를 업데이트하지 않습니다."렌더링" 속성이 없는 상위 구성 요소 중 하나를 가리켜야 합니다.대안으로, 레이아웃="없음" 으로 구성 요소를 래핑할 수 있습니다.

다른 팁

A4J : outputPanel에서 ajaxrendered = "true"를 설정하는 것을 잊지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top