2

JBoss AS 7.1 で PrimeFaces 3.2 で JSF を使用しています。

問題: バックエンドからフロントエンドに (通常の JSF 検証ではなく) 検証結果を渡すことができません。

エンティティにバインドされたフォームがあり、保存ボタンをクリックすると、エンティティの検証が必要になります。

<p:growl id=saveSuccessDialog" />

<p:dialog widgetVar="verificationDialog" modal="true"
    header="#{msg['dialog.title.verificationError']}" resizable="false">
    <h:form id="verificationErrorForm">
        <h:outputText value="#{verificationResult.problemDescription}" />
    </h:form>
</p:dialog>

<h:form>
...some fields...
<p:commandButton
    actionListener="#{adminBean.saveObject}"
    value="Save" icon="ui-icon-check"
    onerror="verificationDialog.show();"
    update=":verificationErrorForm :saveSuccessDialog" />
</h:form>

これで、Bean のアクションは次のようになります。

public void saveObject(ActionEvent event) {
    this.verifyObject();
    if (verificationResult.isValidConfiguration()) {
        FacesContext.getCurrentInstance().addMessage("Object successfully saved", new FacesMessage("Saved")); // this is correctly shown in the growl
        objectDao.save(this.sessionBean.getSelectedObject());
    } else {
        FacesContext.getCurrentInstance().getExternalContext().setResponseStatus(500);
    }
}

そして検証結果:

@Named
@ConversationScoped
public class VerificationResult implements Serializable {
    private String problemDescription; // with get/set
    ... some more information about the problem here ...
}

意図が明確であることを願っています。ユーザーが「保存」をクリックすると、検証が実行され (動作します)、検証が失敗した場合は、ダイアログに追加情報が表示されます。検証が成功すると、「保存成功」といううなり声が表示されます。それもうまくいきます。

しかし、verificationError-dialog が表示される場合は、verificationResult.problemDescription設定されていても空です。

では、2 つの質問: a) どうすれば解決できますか? b) そのような要件を処理するためのより良い解決策はありますか?

質問が理解できることを願っています。前もって感謝します!

4

1 に答える 1

2

さらに数時間検索した後、私はついにPrimeFacesフォーラムで解決策を見つけました:http: //forum.primefaces.org/viewtopic.php ?f = 3&t = 16769

基本的な考え方は、ダイアログを表示するかどうかに関係なく、visibleダイアログ自体の属性に評価をスケジュールしてからupdate、commandButton/Linkの属性でダイアログを更新できるようにすることです。

他のフォーラムでその質問をしてくれたBalusCに感謝します:-)

于 2012-05-18T10:55:09.540 に答える