2013-12-18 2 views
0

Richfaces의 모달 popupPanel을 포함하고있는 JSF 페이지를 가지고 있으며이 popupPanel은 extendedDataTable입니다. 이제 사용자가 새 행을 선택할 때마다 빈에서 사용자 선택을 원합니다. 처음에는 코드를 보여주고 싶습니다. 문제를 설명 할 것입니다. 청취자와 필요한 회원들과 함께 콩을 해당Ajax에없는 popupPanel 내부의 extendedDataTable 선택 요청 매개 변수

<rich:popupPanel id="kontaktPanel" modal="true" onmaskclick="#{rich:component('kontaktPanel')}.hide()"> 

    <rich:extendedDataTable 
     value="#{nachfrageBean.loadedKontakte}" var="kontakt" 
     selection="#{nachfrageBean.selection}" id="kontaktTable"> 

      <rich:column> 
       <f:facet name="header"> 
        <h:outputText value="#{messages['tabelle.kontakt.instknz']}" /> 
       </f:facet> 
       <h:outputText value="#{kontakt.instKnz}" /> 
      </rich:column> 
      <rich:column> 
       <f:facet name="header"> 
        <h:outputText value="#{messages['tabelle.kontakt.name']}" /> 
       </f:facet> 
       <h:outputText value="#{kontakt.name}" /> 
      </rich:column> 

     <a4j:ajax execute="kontaktTable kontaktPanel" event="selectionchange" listener="#{nachfrageBean.selectedRecord}" /> 
    </rich:extendedDataTable> 

</rich:popupPanel> 

가 :

public class NachfrageBean { 


    private KontaktDTO kontakt; 

    private List<KontaktDTO> loadedKontakte = new ArrayList<KontaktDTO>(); 

    /** DOCUMENT ME! */ 
    private Collection<Object> selection; 



    public Collection<Object> getSelection() { 
     return selection; 
    } 


    public void setSelection(Collection<Object> selection) { 
     this.selection = selection; 
    } 

    public List<KontaktDTO> getLoadedKontakte() { 
     //contacts are successfully loaded 
     return kontaktBusiness.getAllKontakte(); 
    } 


    public KontaktDTO getKontakt() { 
     return kontakt; 
    } 


    public void setKontakt(KontaktDTO kontakt) { 
     this.kontakt = kontakt; 
    } 


    public void selectedRecord(AjaxBehaviorEvent event) { 

     UIExtendedDataTable dataTable = (UIExtendedDataTable)event.getComponent(); 
     Object originalKey = dataTable.getRowKey(); 

     for(Object selectionKey : selection) { 
      dataTable.setRowKey(selectionKey); 

      if(dataTable.isRowAvailable()) { 
       // do something with the selection 
      } 
     } 

     dataTable.setRowKey(originalKey); 
    } 

} 

리스너가 성공적으로 할 때 호출되는 popupPanel과 extendedDatatable와 XHTML 페이지의

부 사용자가 데이터 테이블에서 행을 선택하지만 선택 항목이 null이므로 NPE가 표시됩니다. 그리고 popupPanel을 제거하고 내 extendedDatatable을 내 페이지에서 직접 작성하면 올바르게 작동합니다. 나는 항상 요청 매개 변수를 출력하고 pupupPanel 안에 datatable이있을 때 두 개의 누락 된 매개 변수가 있음을 알 수 있습니다. 이 요청 매개 변수는 다음과 같습니다

  • mainForm : kontaktTable : WI =
  • mainForm : kontaktTable : SI = 3,3 | 3 kontaktTable에서 선택 가져 팝업 외부 그래서 || X

제출되었지만 팝업 패널 내부에는 없습니다. 아무도 여기서 뭐가 잘못 됐는지 아니?

답변

1

방금 ​​solution here을 찾았습니다.

기본적으로 rich : popupPanel은 본문에 연결되며 양식에는 연결되지 않습니다. domElementAttachment = "form"을 popupPanel에 추가하면됩니다.