2012-08-06 2 views
4
대화

에 값을 업데이트하지 못한다. 그러나 대화 상자에는 선택한 객체의 값이 표시되지 않습니다. 선택한 개체가 디버그 세션 중에 올바르게 설정되었는지 확인할 수 있습니다.Primefaces 아약스 행 선택은 내가 행 선택 이벤트에 대한 상세 대화 상자를 표시하는 데이터 테이블이

표는 학생들의 행으로 구성하고이를 행 선택 이벤트에 대한 자세한 정보를 표시하는 팝업 대화 상자를 표시한다고 가정한다.

StudentBean :

@Named(value = "studentBean") 
@SessionScoped 
public class StudentBean { 

     @Inject 
     private UserFacade userFacade; 
     private List<User> studentList; 
     private User selectedStudent; 


     public StudentBean() { 
     } 

     @PostConstruct 
     public void init() { 
      studentList = userFacade.findAll(); 

     } 


     public List<User> getStudentList() { 
      return studentList; 

     } 


     public void setStudentList(List<User> studentList) { 
      this.studentList = studentList; 
     } 


     public User getSelectedStudent() { 
      return selectedStudent; 
     } 


     public void setSelectedStudent(User student) { 
      this.selectedStudent = student; 
     } 

     public void onRowSelect(SelectEvent event) { 
     } 

     public void onRowUnselect(UnselectEvent event) { 
      //FacesMessage msg = new FacesMessage("Student Unselected", ((User) event.getObject()).getFirstName()); 
      //FacesContext.getCurrentInstance().addMessage("messages", msg); 
     } 


    } 

Facelet 페이지 :

<?xml version='1.0' encoding='UTF-8' ?> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:h ="http://java.sun.com/jsf/html" 
      xmlns:p ="http://primefaces.org/ui"> 

     <body> 

      <ui:composition template="./layout.xhtml"> 

       <ui:define name="content"> 
        <h:form id="studentForm"> 


         <p:dataTable var="student" value="#{studentBean.studentList}" 
            selectionMode="single" 
            selection="#{studentBean.selectedStudent}" rowKey="#{student.id}"> 

          <p:ajax event="rowSelect" listener="#{studentBean.onRowSelect}" 
            update=":studentForm:studentDetail" oncomplete="studentDialog.show()" 
            global="true" immediate="true" 
            /> 
          <p:ajax event="rowUnselect" listener="#{studentBean.onRowUnselect}" /> 


          <p:column headerText="First Name"> 
           <h:outputText value="#{student.firstName}" /> 
          </p:column> 

          <p:column headerText="Last Name"> 
           <h:outputText value="#{student.lastName}" /> 
          </p:column> 

          <p:column headerText="Student ID"> 
           <h:outputText value="#{student.studentid}" /> 
          </p:column> 

         </p:dataTable> 



         <p:dialog id="dialog" header="Student Detail" widgetVar="studentDialog" resizable="false" 
            showEffect="fade" hideEffect="fade" appendToBody="true"> 

          <h:panelGrid id="studentDetail" columns="2" cellpadding="4"> 

           <h:outputText value="First Name: " /> 
           <h:outputText value="#{studentBean.selectedStudent.firstName}" /> 

           <h:outputText value="Last Name: " /> 
           <h:outputText value="#{studentBean.selectedStudent.lastName}" /> 

          </h:panelGrid> 
         </p:dialog> 
       </ui:define> 

      </ui:composition> 

     </body> 
    </html> 

나는 Primefaces 쇼케이스 페이지에서 자동차 데이터 테이블의 예를 다음과 같은거야. 그것은 그렇게 단순 해 보이지만 내가하는 일에 상관없이 선택된 학생 정보를 보여줄 수 없습니다. 대화 상자는 정상적으로 표시되지만 firstName 및 lastName 값은 비어 있습니다.

  • 다른 형태로
  • 사용 과정 = "@ 양식"
  • 를 사용하여 프로세스를 대화 퍼팅 = ": studentForm : studentDetail"

    나는 다음과 같은 노력

무엇 내가 틀렸어? Primefaces 3.3.1

, 글래스 피시 3.1.2

+0

기본적으로 양식이 처리됩니다. 또한 대화 상자를 다른 양식으로 이동해도 도움이되지 않습니다. 즉시 속성을 제거하거나 (기본값으로 false로 설정하십시오.) 나는 쇼케이스에서 그것을 보지 못합니다. – Damian

+0

안녕하세요 @ Damian 저는 먼저 즉각적인 속성이 없으면 예제를 자세히 보려고했습니다. –

+0

동일한 문제가 발생했습니다. 해결책을 찾았습니까? –

답변

0

I 제거 글로벌 = "true"를 즉시 = "true"로, 페이지에서 사용하지 않는 청취자 : 아약스, 동기화 rowKey = "# {student.id}"와 "Student ID"열의 표현식 및 @PostConstruct init() 함수 내의 studentList 이 채워져 userFacade 코드의 동작 방식을 모르고 작동합니다.