2014-04-02 3 views
1

일부 프로젝트에 대한 정보를 나열하는 PrimeFaces을 사용하는 간단한 페이지를 개발 중입니다. 자세한 정보가 담긴 대화 상자를 여는 버튼을 추가하고 싶었습니다. 코드는 아주 간단합니다.JSF (PrimeFaces) 페이지가 단일 양식으로 작동하지 않습니다.

<h:form id="projectForm"> 
    <p:dataTable id="projectDataTable" var="project" value="#{projectMB.projects}" > 
    <p:column sortBy="name" headerText="Name"> 
     <h:outputText value="#{project.name}" /> 
    </p:column> 
    <p:column sortBy="status" headerText="Status"> 
     <h:outputText value="#{project.status}" /> 
     <h:outputText value=" (#{project.progress}%)" /> 
    </p:column> 
    <p:column style="width:4%"> 
     <p:commandButton update=":projectForm:display" id="selectButton" oncomplete="PF('projectDialog').show()" icon="ui-icon-search" title="View"> 
     <f:setPropertyActionListener value="#{project}" target="#{projectMB.selectedProject}" /> 
     </p:commandButton> 
    </p:column>    
    </p:dataTable> 
    <center> 
    <p:commandButton id="refreshProjectsButton" actionListener="#{projectMB.refreshProjectList}" icon="ui-icon-refresh" update="projectDataTable"/> 
    </center> 

    <p:dialog header="Project Detail" widgetVar="projectDialog" resizable="false" id="projectDlg" showEffect="fade" modal="true"> 
    <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;"> 
     <h:outputText value="Name:" /> 
     <h:outputText value="#{projectMB.selectedProject.name}" style="font-weight:bold"/> 
     <h:outputText value="Description:" /> 
     <h:outputText value="#{projectMB.selectedProject}" style="font-weight:bold"/> 
    </h:panelGrid> 
    </p:dialog> 
</h:form> 

나는 dialog를 둘러싸 별도의 양식을 추가하여 해결책을 발견 : 그러나 그것은 작동하지 않습니다

<h:form id="projectForm"> 
    <p:dataTable id="projectDataTable" var="project" value="#{projectMB.projects}" > 
    <p:column sortBy="name" headerText="Name"> 
     <h:outputText value="#{project.name}" /> 
    </p:column> 
    <p:column sortBy="status" headerText="Status"> 
     <h:outputText value="#{project.status}" /> 
     <h:outputText value=" (#{project.progress}%)" /> 
    </p:column> 
    <p:column style="width:4%"> 
     <p:commandButton update=":projectForm2:display" id="selectButton" oncomplete="PF('projectDialog').show()" icon="ui-icon-search" title="View"> 
     <f:setPropertyActionListener value="#{project}" target="#{projectMB.selectedProject}" /> 
     </p:commandButton> 
    </p:column>    
    </p:dataTable> 
    <center> 
    <p:commandButton id="refreshProjectsButton" actionListener="#{projectMB.refreshProjectList}" icon="ui-icon-refresh" update="projectDataTable"/> 
    </center> 

</h:form> 
<h:form id="projectForm2"> 

    <p:dialog header="Project Detail" widgetVar="projectDialog" resizable="false" id="projectDlg" showEffect="fade" modal="true"> 
    <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;"> 
     <h:outputText value="Name:" /> 
     <h:outputText value="#{projectMB.selectedProject.name}" style="font-weight:bold"/> 
     <h:outputText value="Description:" /> 
     <h:outputText value="#{projectMB.selectedProject}" style="font-weight:bold"/> 
    </h:panelGrid> 
    </p:dialog> 
</h:form> 

내 질문은 : 첫 번째 코드가 작동하지 않는 이유를 - 방법 projectMB.refreshProjectList를 새로 고치는 것이 java bean의 목록은 절대로 호출되지 않습니다. 자바 스크립트와 자바에서 오류가 발생하지 않습니다.

+0

는 평소처럼, "이 작동하지 않습니다는"문제의 매우 모호한 설명입니다. 최소한의 예제도 제공해야합니다. 99 %의 경우 전체 코드를 게시하지 않고 문제를 재현 할 수 있습니다. 이는 독자의 소음입니다. –

+0

@ Łukasz 웃 L ツ 내가 생각하는 문장은 "자바 빈에서 목록을 새로 고치는 method projectMB.refreshProjectList가 호출되지 않는다"는 것이 무엇이 문제인지 설명합니다. – gawi

+0

버튼을 클릭해도 아무런 반응이 없으며 로그에 메시지가 전혀없고 자바 스크립트 콘솔에 요청이나 오류 메시지가 표시되지 않습니까? 데이터 테이블을 제거하면 어떻게됩니까? 최소한의 예제를 만들었습니다. 2 개의 버튼이 있습니다. 하나는 서버 메소드를 호출하고 다른 하나는 대화 상자를 엽니 다. 대화 상자는 같은 형식입니다. 모든 것이 원활하게 작동합니다. –

답변

2

양식 내부의 대화 상자에서 자주 발생하는 문제이며,이 문제에 대해 조금만 답하면 쉽게 대답을 찾을 수 있습니다.

그러나 아마이 대답은 더 당신을 도울 수 :

Proper Construct for Primefaces Dialog

+0

대화 상자는 DOM 트리의 아무 곳에 나 배치 할 수 있지만 그 이유는 무엇입니까? 나는 태그가 생성 된 HTML의 어느 부분에 포함되어야 하는지를 정의한다고 생각했다. – gawi

관련 문제