我有一个xhtml页面,我正在尝试打开一个对话框并设置/更改一些值。页面通常由MemberInformationService支持,在此页面的page.xml中,我调用一个wire函数将一些值设置为MemberLogHome的实例。一切都很完美。当我按下commandButton打开对话框时,我可以看到MemberLogHome的实例设置正确,(我可以看到我在对话框中设置的值),但同时,有一个意外的createInstance调用,后来继续使用setInstance使MemberLogHome的实例值为null。因此,当我提交对话框时,我会收到错误。我无法找到令人意外的电话。每当我打开一个对话框时,也会执行此调用。我正在使用Seam 2.3和primefaces 3.5
课程非常大我只写了我认为相关的部分
Xhtml内部:
<p:menuitem value="#{messages.overallChange}"
onclick="dlg2.show()" />
<p:dialog header="#{messages.overallChange}" widgetVar="dlg2"
modal="true" resizable="true" appendToBody="true">
<h:form>
<p:panelGrid columns="1">
<s:decorate template="layout/edit.xhtml">
<ui:define name="label">#{messages.memberId}</ui:define>
<p:inputText
value="#{memberLogHome.instance.memberByNewMemberId.id}" />
</s:decorate>
....
<h:commandButton value="#{messages.submit}"
action="#{memberInformationService.saveOverallChange}"
oncomplete="dlg2.hide();" />
</h:form>
</p:dialog>
在MemberInformationService内部
@Name("memberInformationService")
@Scope(ScopeType.PAGE)
public class MemberInformationService {
@In(create = true)
MemberLogHome memberLogHome;
...
public void wire() {
...
fillMemberLog();
}
public void fillMemberLog(){
memberLogHome.clearInstance();
memberLogHome.setInstance(new MemberLog());
memberLogHome.getInstance().setBranchByNewBranchId(trustMemberHome.getInstance().getBranch());
...
}
答案 0 :(得分:0)
如果您的page.xml中使用public void wire()
标记调用<action />
,请确保其on-postback
属性设置为false
,否则将再次调用在任何回发上,包括表单提交,执行前两行fillMemberLog()
并清除实例中的值。