Как отобразить FacesMessage для конкретной commandLink / commandButton / form? - PullRequest
5 голосов
/ 27 января 2012

При нажатии кнопки «Отправить» я должен выполнить проверки на уровне приложения / бизнес-уровня и связать сообщение об ошибке со ссылкой.Поскольку я не могу этого сделать, есть ли способ разместить сообщение об ошибке поверх ссылки.

Моя проверка бизнес-логики заключается в методе действия

FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary("ERROR MESSAGE");
message.setDetail("ERROR MESSAGE");
FacesContext.getCurrentInstance().addMessage("linkId", message);

Помощь очень ценится

Ответы [ 2 ]

12 голосов
/ 27 января 2012

Первый аргумент FacesContext#addMessage() должен быть идентификатором клиента, а не идентификатором компонента.Идентификатор клиента - это то, что вы видите в качестве идентификатора HTML-элемента в сгенерированном HTML-выводе (как вы можете увидеть, щелкнув правой кнопкой мыши страницу и Просмотр источника в браузере).Для компонентов ввода и команд JSF в форме это обычно начинается с идентификатора формы.

Таким образом, для следующей ссылки

<h:form id="formId">
    ...
    <h:commandLink id="linkId" ... />
    <h:message for="linkId" />
</h:form>

вы должны добавить сообщение следующим образом:

FacesContext.getCurrentInstance().addMessage("formId:linkId", message);

Однако более канонический подход к отображению глобальных сообщений, который вы бы сделали в методе действия, заключается в использовании <h:messages globalOnly="true" />, который можно заполнять сообщениями с null идентификатором клиента.

Итак,

<h:form id="formId">
    ...
    <h:commandLink id="linkId" ... />
    <h:messages globalOnly="true" />
</h:form>

с

FacesContext.getCurrentInstance().addMessage(null, message);

См. Также:

0 голосов
/ 27 января 2012

Вы можете связать сообщение об ошибке со ссылкой. Для этого напишите метод действия для вашей кнопки, как показано ниже:

<h:commandButton label="Submit" action="#{actionBean.actionMethod}"/>

И способ действия следующий:

public String actionMethod(){
  if(error){
     return "error";
  else
     return "index";
}

Метод возвращает результат. Например, страница переходит в /error.xhtml при возникновении ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...