我有这段代码:
<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"/>
调用该方法,但不处理表单。
任何帮助?
谢谢!
答案 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