Другим подход, вы можете использовать FacesMessage
здесь, которые вы добавляете в контекст с помощью FacesContext#addMessage()
. FacesMessages основаны на запросах и, вероятно, больше подходят для конкретных функциональных требований, чем для некоторых пользовательских методов обмена сообщениями.
Вот пример метода боба действия:
public void sendMail() {
FacesMessage message;
try {
Mailer.send(from, to, subject, message);
message = new FacesMessage("Mail successfully sent!");
} catch (MailException e) {
message = new FacesMessage("Sending mail failed!");
logger.error("Sending mail failed!", e); // Yes, you need to know about it as well! ;)
}
FacesContext.getCurrentInstance().addMessage(null, message);
}
С null
ClientId сообщение становится «глобальным», так что вы можете использовать следующую конструкцию для отображения только глобальных сообщений:
<h:messages globalOnly="true" />
Update: иметь сообщение об успешном выполнении и ошибки отображаются в другом стиле, играть с FacesMessage.Severity
:
message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Mail successfully sent!", null);
} catch (MailException e) {
message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Sending mail failed!", null);
.. в сочетании с infoClass/infoStyle
и errorClass/errorStyle
в h:messages
:
<h:messages globalOnly="true" infoStyle="color:green" errorStyle="color:red" />
Запрос данных принадлежит области видимости в области видимости запроса. Данные, полученные с помощью сеанса, относятся к области сеанса. Это не может быть более ясным/очевидным. Другими словами: рефакторинг. – BalusC
Мне нужно отправить по почте данные из области сеанса (я не могу поместить их в область запроса). Но сообщение результата должно быть в области запроса (потому что я хочу увидеть его только один раз сразу после отправки почты). Что я могу сделать рефактору? – Roman
Я понимаю, если это ** только ** обмен сообщениями, тогда вы также можете просто захватить 'FacesMessage'. См. Мой ответ. – BalusC