p:p:commandButton在对话框中不起作用

时间:2014-01-07 09:38:59

标签: jquery jsf-2 primefaces dialog java-ee-6

我想使用包含一些commandButtons的p:对话框,但我不能从命令按钮调用我的bean而不知道原因。

在xhtml页面上有两种形式,第一种形式包含一些东西,如面板,面板,按钮等。 第二个表单只包含我的对话框。

我的beanHandler(beanHandler)是ViewAccessScoped。 这个xhtml页面上的所有内容都只适用于我的p:面板无法正常工作

    <?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="#{beanHandler.lastActivity}" id="dlg">

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

(将呈现的属性更改为true)显示对话框,但我的按钮不起作用(无法调用bean)。 如果不知道为什么会这样。

有人有想法吗?

此致

1 个答案:

答案 0 :(得分:0)

使用属性appendToBody,您可以将实际对话框直接附加到body - 元素。通过它,它不再是形式。没有表格,就没有Bean调用。可能的解决方案:

  • 将另一个<h:form>放入p:dialog
  • 相应地更改appendToBody属性,可能将其设置为false并将p:dialog移至另一个位置(直接作为已存在的<h:form>的子项)

希望它有所帮助...