【发布时间】:2016-10-02 23:40:01
【问题描述】:
所以我有这个代码:
<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
}
【问题讨论】:
-
我注意到,如果我将对话框和 commandButton 分成两种不同的形式,@PostConstruct 方法不会在对话框打开时调用,但在单击取消按钮时仍会调用
-
所以你一直在谈论一个bean,但没有发布代码。请创建一个minimal reproducible example
-
我还注意到,如果我删除对话框内的 inputText,问题就不会发生
-
我尝试从对话框外部删除表单并按照建议在对话框内添加一个,但行为仍然存在。正如我之前所说,出于某种原因,删除 inputText 会在对话框打开和取消按钮时停止页面重新加载。但我无法解释为什么
标签: jsf primefaces