出现错误时显示对话框

时间:2012-05-18 08:48:48

标签: jsf primefaces

我在JBoss AS 7.1上使用JSF和PrimeFaces 3.2。

问题:我无法将验证结果(不是常规的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);
    }
}

VerificationResult:

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

我希望,目的很明确:当用户点击“保存”时,验证将运行(运行正常),如果验证失败,则会弹出一个对话框,其中包含其他信息。如果验证成功,则会出现“保存成功”咆哮。这也有效。

但是如果显示了verifyError对话框,verificationResult.problemDescription虽然已经设置,但它是空的。

所以,有两个问题: a)我该如何解决? b)是否有更好的解决方案来处理这些要求?

我希望,这个问题是可以理解的。提前谢谢!

1 个答案:

答案 0 :(得分:2)

经过几个小时的搜索,我终于在PrimeFaces论坛找到了解决方案: http://forum.primefaces.org/viewtopic.php?f=3&t=16769

基本思想是将评估(无论是否显示对话框)安排到对话框本身的visible - 属性,然后让对话框在update - 属性中更新commandButton / Link。

感谢BalusC在另一个论坛上提出这个问题: - )