我在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)是否有更好的解决方案来处理这些要求?
我希望,这个问题是可以理解的。提前谢谢!
答案 0 :(得分:2)
经过几个小时的搜索,我终于在PrimeFaces论坛找到了解决方案: http://forum.primefaces.org/viewtopic.php?f=3&t=16769
基本思想是将评估(无论是否显示对话框)安排到对话框本身的visible
- 属性,然后让对话框在update
- 属性中更新commandButton / Link。
感谢BalusC在另一个论坛上提出这个问题: - )