所以我有这段代码:
<h:form id="serviceCustomFormForm">
<p:dialog id="parameterGroupAddDialog" widgetVar="parameterGroupAddDialog" header="#{messages.addParameterGroup}" modal="true" resizable="false">
<p:inputText value="#{serviceCustomFormBean.serviceParameterGroup.name}" styleClass="Wid90" />
<br />
<br />
<p:commandButton value="#{messages.save}" styleClass="Fright BlueButton" update="serviceCustomFormForm" actionListener="#{serviceCustomFormBean.addServiceParameterGroup}" oncomplete="PF('parameterGroupAddDialog').hide()" />
<p:commandButton value="#{messages.cancel}" styleClass="Fright RedButton" oncomplete="PF('parameterGroupAddDialog').hide()"/>
</p:dialog>
<div class="Container100">
<div class="ContainerIndent">
<p:commandButton value="#{messages.addParameterGroup}" icon="fa fa-plus-circle" styleClass="Fright CyanButton FloatNoneOnMobile" oncomplete="PF('parameterGroupAddDialog').show()" />
<div class="EmptyBox10 ShowOnMobile"></div>
</div>
</div>
</h:form>
首次加载页面时,将调用@PostConstruct方法。 当我单击commandButton打开对话框时,它再次被调用。当我按下对话框内的取消按钮时,它会再次被调用。
在应用程序的其他部分中不会发生此行为,我无法看到我在这里缺少的内容。
更新:根据要求,Bean代码在此处:
@ManagedBean
@ViewScoped
public final class ServiceCustomFormBean implements Serializable {
private ServiceParameterGroup serviceParameterGroup = new ServiceParameterGroup();
// Other attributes
@PostConstruct
private void init() {
// Reads attributes sent from previous page
}
public void addServiceParameterGroup() {
// Saves the serviceParameterGroup to database
}
// Getters and Setters
}
答案 0 :(得分:2)
这是因为Commandbutton
提交了表单。您可以
改为:
<p:commandButton type="button" ...onclick="PF('parameterGroupAddDialog').hide()"
类型button
告诉primefaces不要提交表单。如果表单未提交,则永远不会调用oncomplete
。所以它是onclick
。
答案 1 :(得分:0)
尝试将以下属性设置为“添加服务”&#39;和&#39;取消&#39; commandButton elements:partialSubmit =&#34; true&#34;过程=&#34; @这&#34 ;. 像这样的代码:
<commandButton value="#{messages.addParameterGroup}" ... partialSubmit="true" process="@this" ... />
默认情况下,pf commandButtons尝试提交整个表单,而在这两种情况下,您只想调用被调用的方法而不进行提交。有了这个,你要说的是你不想全部提交(partialSubmit = true),并且你只想处理按钮本身的调用(process = @ this)。也许那是你的问题。
作为一个额外的评论,我不认为从bean获取按钮的标签值是一个好主意(除非你想有意识地动态更改标签),因为你最终会做出过多的请求豆子。最好尝试使用消息属性文件,如http://www.mkyong.com/jsf2/jsf-2-0-and-resource-bundles-example/中所述。
答案 2 :(得分:0)
如果我没记错的话,你应该把你的Dialog放在你的主要表格之外,身体的末端或使用 appendTo =&#34; @(body)&#34; param,然后,在对话框中有另一个表单。
答案 3 :(得分:0)
经过长时间处理这个问题,我终于找到了原因。 我在辅助bean中导入的注释ViewScoped来自包 javax.faces.view 。 正确的是 javax.faces.bean 。
感谢所有花时间寻求帮助的人。