未从对话框CommandButton调用ActionListener方法

时间:2017-02-06 20:14:23

标签: primefaces

我有这段代码:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:p="http://primefaces.org/ui"  >

    <h:form>
        <h1 class="page-header "> <i class="fa fa-tachometer"></i> Dashboard</h1>
        <p:outputPanel id="contentPanel">
            <p:commandButton value="Añadir caso de prueba" actionListener="#{testCaseBean.prepareCreateTestCase}" oncomplete="PF('addTestCaseDialog').show();" process="@this" update=":dialog"/>
            <p:dataTable>

            </p:dataTable>
        </p:outputPanel>
    </h:form>
    <p:dialog header="Crear caso de prueba" modal="true" id="dialog" widgetVar="addTestCaseDialog" closable="false">
        <h:form id="addTestCaseDialogForm">
            <p:panelGrid columns="4" styleClass="ui-noborder">
                <p:outputLabel for="testCaseName" value="Nombre del caso de prueba:"/>
                <p:inputText id="testCaseName" value="#{testCaseBean.testCase.testCaseName}" required="true"/>
                <p:outputLabel for="assignedTask" value="Tarea relacionada:"/>
                <p:inputText id="assignedTask" value="#{testCaseBean.testCase.assignedTask}" required="true"/>
                <p:outputLabel for="isRegressive" value="Regresivo:" />
                <p:selectBooleanCheckbox id="isRegressive" value="#{testCaseBean.testCase.isRegressive}"/>
            </p:panelGrid>
            <p:commandButton value="Guardar" actionListener="#{testCaseBean.createTestCase}" oncomplete="PF('addTestCaseDialog').hide()" process="addTestCaseDialogForm"/>
            <p:commandButton value="Cancelar" onclick="PF('addTestCaseDialog').hide()" immediate="true" />
        </h:form>
    </p:dialog>

我遇到了问题:对话框commandButton中的actionListener方法没有被调用,我也不知道为什么。 如果把它放在commandButton:

<p:commandButton value="Guardar" actionListener="# {testCaseBean.createTestCase}" oncomplete="PF('addTestCaseDialog').hide()" process="@this"/>

调用该方法,但不处理表单。

任何帮助?

谢谢!

3 个答案:

答案 0 :(得分:2)

PrimeFaces提供基于标准JSF 2 API的部分呈现和视图处理功能 能够选择在JSF生命周期中处理什么以及最后用ajax渲染什么。

有几个保留关键字作为帮助者。

- @ this:触发PPR的组件已更新

- @ parent:更新PPR触发器的父级。

- @ form:更新PPR触发器的封装形式

- @ none:PPR不会使用ajax响应更改DOM。

- @ all:整个文档的更新与非ajax请求一样。

在“部分页面渲染”中,仅渲染指定的组件,类似于“部分处理” 仅处理定义的组件。处理意味着执行应用请求值, 仅在定义的过程验证,更新模型和调用应用程序JSF生命周期阶段 组件。

回到你的问题,你应该使用进程@form

希望这可以帮到你。

答案 1 :(得分:1)

我还看到您将某些字段标记为必需。如果未填充某些必填字段,则验证将失败,并且不会调用操作侦听器。

但如果没有合适的&lt; h:您的网页或模板中的消息&gt; 标记,验证错误不会在任何地方显示!!

确保您还拥有正确的&lt; h:消息&gt; &lt; p:消息&gt; 显示任何可能的验证错误。

我们花了好几个小时才解决这个问题......

答案 2 :(得分:0)

添加流程=&#34; @ this&#34;到commandButton。

另外,请从BalusC学习本指南:

commandButton/commandLink/ajax action/listener method not invoked or input value not updated

相关问题