2012-11-22 2 views
0

이것은 내 문제의 단순화 된 버전입니다. 패널의 일부만 다시 렌더링

<h:form id="form1"> 
    <a4j:commandButton value="Ok" reRender="panel_1"/> 

    <a4j:outputPanel id="panel_1" layout="block" style="height:100px;border:solid 1px;"> 
    Content here should be reRendered 

    <a4j:outputPanel id="panel_2" layout="block" style="height:50px;border:solid green;color:green;"> 
     Content here should not be reRendered 
    </a4j:outputPanel> 

    </a4j:outputPanel> 
</h:form> 

사용자는 다시 렌더링되어야 <a4j:commandButton>, 제 <a4j:outputPanel> (panel_1)을 클릭하면. 그러나 두 번째 <a4j:outputPanel>의 내용은 다시 렌더링하면 안됩니다.
이것이 가능합니까? (적어도 <a4j:outputPanel>을 다른 구성 요소로 변경하십시오.)

답변

0

다시 렌더링하려는 내용을 다른 패널에 배치하는 방법은 무엇입니까? 이처럼 :

<h:form id="form1"> 
    <a4j:commandButton value="Ok" reRender="panel_1_a"/> 
    <a4j:outputPanel id="panel_1" layout="block" style="height:100px;border:solid 1px;"> 

    <a4j:outputPanel id="panel_1_a"> 
     Content here should be reRendered 
    </arj:outputPanel> 

    <a4j:outputPanel id="panel_2" layout="block" style="height:50px;border:solid green;color:green;"> 
     Content here should not be reRendered 
    </a4j:outputPanel> 

은 또는 당신은 다른 곳 panel_2를 이동할 수 있습니다.

+0

사실 내 경우에는 적용 할 수 없습니다. 내 경우 parent가 reRendered 될 때 스타일은'display : none'으로 변경됩니다. 그 다음 아이도 숨겨집니다. 그러나 자식도 다시 렌더링되기 때문에 자식 패널 내부에 입력 한 모든 데이터 사용자는 손실됩니다. 이를 방지하기 위해 모든 입력 필드에서'a4j : support'를 사용할 수 있습니다. 그러나 나는 더 깨끗한 해결책을 찾고있다. – prageeth

+0

@prageeth 당신이 패널을 어떻게 코딩했는지에 따라,'panel_2'는'panel_2'를 포함하여 전체'panel_1'을 다시 렌더링하기 때문에 사라집니다. 부모 컴포넌트가 숨겨져 있기 때문에 자식들이 있습니다. 나는 'panel_1'과'panel_2' 모두 독립적이어야한다고 생각합니다. 여러분의 코드에 맞는 해결책을 모르겠습니다. – jmrodrigg

0

MyFaces을 사용하여 Makhiel 솔루션을 개선 할 수 있습니다. 부분 유효성 검사 및 모델 업데이트를 위해 일부 콘텐츠를 래핑하도록 하위 양식을 정의 할 수 있습니다.

MyFaces를 사용하면 속성을 통해 을 특정 <t:subform>에 연결할 수도 있습니다.

당신은 태그를 사용하는 토마 호크 라이브러리를 포함해야합니다

<%@ taglib prefix="t" uri="http://myfaces.apache.org/tomahawk"%> 

그런 다음 Makhiel의 코드는이 방법 (필자는 <t:subform> 태그 안에 넣어하기 위해 <a4j:outputPanel> 내부의 버튼을 이동하고 있습니다를 다시 작성할 수 있습니다. 나는 이것이 당신이 찾고있는 동작입니다 알고 돈

<h:form id="form1"> 
    <a4j:outputPanel id="panel_1" layout="block" style="height:100px;border:solid 1px;"> 
     <t:subform id="FirstPanelForm"> 
      <t:commandButton value="Ok" reRender="panel_1_a" actionFor="FirstPanelForm"/> 
      <a4j:outputPanel id="panel_1_a"> 
       Content here should be reRendered 
      </a4j:outputPanel> 
     </t:subform> 
     <a4j:outputPanel id="panel_2" layout="block" style="height:50px;border:solid green;color:green;"> 
      Content here should not be reRendered 
     </a4j:outputPanel> 
    </a4j:outputPanel> 
</h:form> 

. 그렇지 않으면 그냥 subform 생각을 고수하고 코드에서 사용하려고합니다.

관련 문제