0

我有一个 xhtml 页面,我试图在其中打开一个对话框并设置/更改一些值。页面通常由 MemberInformationService 支持,在此页面的 page.xml 中,我调用了一个线函数来将一些值设置到 MemberLogHome 的实例中。一切都很完美。当我按下命令按钮打开对话框时,我可以看到 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());
...
}
4

1 回答 1

0

如果您在 page.xml 中public void wire()使用<action />标签调用,请确保其on-postback属性设置为false,否则将在任何回发时再次调用,包括表单提交、执行前两行fillMemberLog()并清除实例中的值。

于 2013-03-07T17:17:05.160 回答