【发布时间】:2020-05-30 08:09:38
【问题描述】:
我有一个调用方法的菜单项。当它失败时,我希望 ajax 调用显示带有异常消息的警报。
menu.xhtml
<rich:panelMenuItem
id="test"
name="test"
label="Ajax call"
mode="ajax">
<a4j:ajax
event="select"
onerror="alert('error: #{facesContext.messageList[0]}');"
oncomplete="alert('Success!');"
listener="#{menuMB.someMethod()}">
</a4j:ajax>
</rich:panelMenuItem>
MenuMB.java
public void someMethod() throws IOException {
try {
// method call which may fail
} catch (Exception e) {
FacesContext context = FacesContext.getCurrentInstance();
FacesMessage mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR, null, e.getMessage());
context.addMessage(null, mensagem);
context.getExternalContext().responseSendError(HttpServletResponse.SC_PRECONDITION_FAILED, e.getMessage());
context.responseComplete();
}
}
点击菜单选项时:
1) 如果方法调用成功,它会显示一条警告消息“Success!”
2) 如果方法调用失败,它只显示一条警告消息“错误:”。如何显示异常信息?
如果我不处理方法调用的异常,即使方法调用失败,oncomplete 事件的警报也会一直显示。
根据 Makhiel 的回答,我注意到我走错了方向。所以我这样做了:
菜单MB:
private String resultMessage;
public void someMethod() {
resultMessage = "Any success message";
try {
// method call which may fail
} catch (Exception e) {
resultMessage = e.getMessage();
}
}
public String getResultMessage() {
return resultMessage;
}
menu.xhtml
<a4j:ajax
event="select"
oncomplete="alert('#{menuMB.resultMessage}');"
listener="#{menuMB.someMethod()}">
</a4j:ajax>
【问题讨论】: