2014-01-07 2 views
1

일부 commandButton이 포함 된 p : 대화 상자를 사용하고 싶지만 명령 단추에서 내 bean을 호출 할 수없고 이유를 모르겠습니다.p : p : dialog의 commandButton이 작동하지 않습니다.

xhtml 페이지에는 두 개의 양식이 있습니다. 첫 번째 양식에는 패널, 패널 그리드, 버튼 등과 같은 항목이 포함되어 있습니다. 두 번째 양식에는 대화 상자 만 포함되어 있습니다.

내 beanHandler (beanHandler)는 ViewAccessScoped입니다. 이 XHTML 페이지 모든 단지 내 페이지를하고있다 : 나는 위의 페이지처럼 사용하는 경우 패널은

<?xml version="1.0" encoding="UTF-8"?> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:m="http://java.sun.com/jsf/composite/components/mmnet"> 

<h:form id="activityForm"> 
    <p:panel > 

... 
... 

    <f:facet name="footer"> 

... 

    <p:commandButton id="readyButton" 
           action="#{beanHandler.toggleStatus()}" 
           rendered="#{beanHandler.ready}" 
           value="#{labels.erledigt}" 
           icon="ui-icon-check" 
           update="@form :dialogForm" 
           onclick="dlg.show()"> 
       <p:tooltip for="readyButton" style="width:300px;"> 
          <h:outputText value="#{messages.adviceWfEventActivityFinish}" /> 
       </p:tooltip> 
    </p:commandButton> 
      </f:facet>  

    </p:panel> 

</h:form> 

<h:form id="dialogForm"> 
    <p:outputPanel id="justAPanel"> 

     <p:dialog header="Ticket schließen?" widgetVar="dlg" resizable="false" appendToBody="true" rendered="#{beanHandler.lastActivity}" id="dlg"> 

      <h:panelGrid columns="2" style="margin-bottom:10px"> 
       <h:outputLabel value="Soll das Ticket geschlossen werden?" /> 
       <p:spacer /> 

       <p:commandButton id="yesButton" 
               value="#{labels.ja}" update=":workflowContentPanel" 
               onclick="dlg.hide()" 
               action="#{beanHandler.closeTicket()}" process="@form"/> 

       <p:commandButton id="noButton" value="#{labels.nein}" update=":workflowContentPanel" onclick="dlg.hide()"/> 
      </h:panelGrid> 

     </p:dialog> 
     </p:outputPanel> 
    </h:form> 

</ui:composition> 

작동하지되면, P : 패널이 buttonClick에 표시되지 않습니다. 내가

<p:dialog header="Ticket schließen?" widgetVar="dlg" resizable="false" appendToBody="true" rendered="true" id="dlg"> 

에 코드

<p:dialog header="Ticket schließen?" widgetVar="dlg" resizable="false" appendToBody="true" rendered="#{beanHandler.lastActivity}" id="dlg"> 

의이 부분을 변경하면 대화 상자가 표시됩니다 (true로 렌더링 속성을 변경),하지만 내 버튼 (불가능 빈을 호출) 작동하지 않습니다. 왜 이러한 일이 발생하는지 잘 모른다면.

누구나 아이디어가 있으십니까? 속성 appendToBody

감사

답변

0

당신은 실제 대화 상자가 body - 요소에 직접 추가합니다. 그것을 통해, 그것은 더 이상 형태가 아닙니다. 양식이 없으면 Bean 호출이 불가능합니다. 가능한 해결책 :

  • appendToBody 속성에 따라 p:dialog
  • 변화에 다른 <h:form>를 넣어, 아마도 그것을 false를 설정하고
(당신이 이미 <h:form> 기존의 자식으로 직접) 다른 곳으로 p:dialog 이동

도움이 되길 바랍니다 ...

+0

중첩 된 양식을 사용해야합니까? – LStrike

+0

물론 아닙니다! Primeface는 대화 상자를 페이지 본문에 추가합니다 (예 : Firebug를 통해 생성 된 HTML을 확인하십시오). 그래서 그것은 form-tag 밖에 있습니다. 가장 좋은 해결책은'appendToBody' 속성을 건너 뛰고 수동으로'p : dialog'를 form-tag의 직접적인 자식으로 설정하는 것입니다. 또 다른 해결책은 대화 상자 자체에 또 다른'

+0

@LStrike 어떤 성공? –

관련 문제