0

ダイアログを開いていくつかの値を設定/変更しようとしているxhtmlページがあります。ページは通常、MemberInformationServiceによってサポートされています。このページのpage.xmlでは、wire関数を呼び出して、MemberLogHomeのインスタンスにいくつかの値を設定します。すべてが完璧になります。commandButtonを押してダイアログを開くと、MemberLogHomeのインスタンスが正しく設定されていることがわかります(ダイアログで設定した値を確認できます)が、同時に、予期しないcreateInstance呼び出しがあり、後でsetInstanceが続行されます。 MemberLogHomeのインスタンス値をnullにします。このため、ダイアログを送信するとエラーが発生します。予期しない呼び出しを行うものが見つかりませんでした。また、この呼び出しは、ダイアログを開くたびに実行されます。Seam2.3とprimefaces3.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.xmlpublic void wire()のタグで呼び出される場合は、その属性が に設定されていることを確認してください。そうしないと、フォームの送信を含むすべてのポストバックで再度呼び出され、インスタンスの最初の 2 行が実行され、値がクリアされます。<action />on-postbackfalsefillMemberLog()

于 2013-03-07T17:17:05.160 に答える