У меня есть пункт меню, который вызывает метод. Когда происходит сбой, я хочу, чтобы при вызове ajax отображалось предупреждение с сообщением об исключении.
menu.x html
<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) Если вызов метода завершается успешно, отображается предупреждение с сообщением «Успех!»
2) Если вызов метода не выполняется, отображается оповещение только с сообщением «ошибка:». Как отобразить сообщение об исключении?
Если я не обработаю исключения при вызове метода, оповещение о событии oncomplete всегда будет отображаться, даже если вызов метода завершится неудачей.
На основе на ответ Махиэль я заметил, что иду в неправильном направлении. Итак, я сделал это:
MenuMB:
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.x html
<a4j:ajax
event="select"
oncomplete="alert('#{menuMB.resultMessage}');"
listener="#{menuMB.someMethod()}">
</a4j:ajax>