2014-06-23 2 views
0

여기 Primefaces5 + JSF2에 내가 내 XHTML 코드

public void renderUploadPanel(AjaxBehaviorEvent event) { 
     // String selecteValues = (String) event. ; 
     visibleGTFlag = true; 
     System.out.println("Method called----------->"+visibleGTFlag); 
    } 

를 호출하고

<p:selectOneRadio id="selectone" 
        value="#{tweetDistributionManagedBean.tweetType}"> 
        <f:selectItem itemLabel="Group Tweets" itemValue="GT" /> 
        <f:selectItem itemLabel="Event Tweets" itemValue="ET" /> 
        <f:selectItem itemLabel="Suprachar Tweets" itemValue="ST" /> 
        <p:ajax event="click" 
         listener="#{tweetDistributionManagedBean.renderUploadPanel}" 
         update="gtid" process="@form" /> 
       </p:selectOneRadio> 

및 Java 방법을 작동하지 렌더링 체크 박스를 클릭했을 때 나는이 패널을 rendred 할

<p:panel id="gtid" 
       rendered="#{tweetDistributionManagedBean.visibleGTFlag}" 
       toggleable="true"> 
       <p:fileUpload 
        fileUploadListener="#{tweetDistributionManagedBean.handleFileUpload}" 
        mode="advanced" multiple="true" update="messages" auto="true" 
        sizeLimit="1048576" allowTypes="/(\.|\/)(doc|docx|xls|xlsx|pdf)$/" /> 
      </p:panel> 

하지만이 페이지를 새로 고칠 때이 패널이 내가 잘못하고있는 것을 렌더링 할 때?

+0

빈의 범위는 무엇입니까? <h:panelGroup layout="block">을 사용하면 HTML div로 렌더링 할 수 있습니다. '@ RequestScoped'또는 '@ ViewScoped'인 경우'visibleGTFlag' 필드의 초기 값은 무엇입니까? –

+0

'@ SessionScoped'를 사용하고 있습니다. – user3696143

+0

페이지를 새로 고치면 실제로 전체 페이지를 새로 고치거나 아약스 업데이트를 언급하고 있습니까? –

답변

1

구성 요소가 rendered="false" 인 경우 뷰 트리 구성 요소에 추가되지 않으므로 현재 뷰의 구성 요소에서 참조하거나 업데이트 할 수 없습니다. 이것은 동일한 뷰에 있기 때문에 Ajax 요청으로 구성 요소를 업데이트하려고하면이 업데이트가 실패하는 이유를 설명하고 페이지에서 전체 요청을 실행하면 구성 요소를 볼 수있는 반면 새로운 뷰이기 때문에 구성 요소를 볼 수 있습니다 .

이러한 문제의 해결 방법은 렌더링되지 않은 구성 요소를 UIContainer 안에 래핑하고 대신 래퍼 구성 요소를 업데이트하는 것입니다.

<p:selectOneRadio id="selectone" 
    value="#{tweetDistributionManagedBean.tweetType}"> 
    <f:selectItem itemLabel="Group Tweets" itemValue="GT" /> 
    <f:selectItem itemLabel="Event Tweets" itemValue="ET" /> 
    <f:selectItem itemLabel="Suprachar Tweets" itemValue="ST" /> 
    <p:ajax event="click" 
     listener="#{tweetDistributionManagedBean.renderUploadPanel}" 
     update="gtidWrapper" process="@form" /> 
</p:selectOneRadio> 

<!-- rest of Facelets code... --> 

<h:panelGrid id="gtidWrapper" layout="block"> 
    <p:panel id="gtid" 
     rendered="#{tweetDistributionManagedBean.visibleGTFlag}" 
     toggleable="true"> 
     <p:fileUpload 
      fileUploadListener="#{tweetDistributionManagedBean.handleFileUpload}" 
      mode="advanced" multiple="true" update="messages" auto="true" 
      sizeLimit="1048576" allowTypes="/(\.|\/)(doc|docx|xls|xlsx|pdf)$/" /> 
    </p:panel> 
</h:panelGrid> 
+0

오 예 덕분에 내가 그 지점을 놓친 페이지를로드 할 때 그걸로 DOM 트리에 추가되지 않은 방법을 렌더링하지 않습니다 ... 내게 상기시켜 줘서 고마워. 하나만 질문을 어떻게 확인란을 클릭 한 같은 가치를 얻을 비즈니스 로그인을 쓸 수 있습니까? – user3696143

+0

서버 쪽에서 체크 박스에 연결된 필드의 값을 확인하십시오. public void renderUploadPanel (SelectEvent event) { \t String selecteValues ​​= (String) event.getObject();} – user3696143

+0

@ user3696143 나는 당신이 원하는/원하는 것에 대해 더 나은 설명을주는 또 다른 질문을 게시해야한다고 생각합니다. –