2013-10-08 2 views
0

У меня есть кнопка на моей странице.пользовательское сообщение, выпущенное из bean-метода

<h:commandButton id="makeSearch" value="#{msg.makeWycena}"> 
    <f:ajax event="click" render="@all" listener="#{searchBean.makeSearch()}"/> 
</h:commandButton> 

makeSearch() метод сначала проверяет значение из базы данных, и если это значение null он выполняет определенную логику. Но когда значение не null, то я хотел бы отобразить сообщение об ошибке.

Я подумал о том, чтобы сделать <h:outputtext rendered = {not null XXX}/> и по этой причине сделать специальную переменную XXX, но я уверен, что это можно сделать с помощью простой формы <h:message />, но не могу найти.

Мой код выглядит следующим образом:

else { 
      FacesContext fc = FacesContext.getCurrentInstance(); 
      fc.addMessage(null , new FacesMessage("XXXXXXXX")); 
      return null; 
     } 

Я хочу, чтобы сообщение XXXXXXXXX, которое будет отображаться в:

<h:message for="makeSearch" globalOnly="true" style="color:red;margin:8px;"/> 

Следующая кнопка я отправил раньше, чтобы командовать. Сейчас он оказывается в нижней части страницы


После нескольких изменений мой код выглядит как это прямо сейчас: Код

<h:form id="detailsForm" prependId="false"> 
    <h:commandButton id="makeSearch" value="#{msg.makeWycena}"> 
    <f:ajax event="click" render="@all" listener="#{searchBean.makeSearch()}"/> 
</h:commandButton> 
<h:message for="makeSearch" id ="makeSearchError" style="color:red;margin:6px;left-margin:10px;"/> 

и фасоли:

else {FacesContext.getCurrentInstance().addMessage("detailsForm:makeSearchError" , 
    new FacesMessage("XXXXXXXXXXXX")); } 

, но до сих пор. сообщение не отображается в сообщении h:. Я попробовал также detailForm: makeSeach, и это не помогло

+1

Используйте '' для генерируемых сообщений с сервера вместо текущего ''. –

+0

Как и на моей конкретной странице, у меня есть только одно сообщение для отображения этого подхода, хорошо, я буду использовать этот совет :), но все же хотел бы знать, как это сделать, если у меня будет несколько сообщений об ошибках для отображения в отдельных ящиках сообщений в будущем. –

+1

Из ['FacesContext # addMessage'] (http://docs.oracle.com/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/api/javax/faces/context/FacesContext.html # addMessage (java.lang.String, javax.faces.application.FacesMessage)) javadoc, первым параметром должен быть идентификатор клиента. Поскольку вы устанавливаете 'null', это означает, что он не обращает внимания на какой-либо компонент, поэтому он перейдет прямо к' '. См. Этот Q/A для получения дополнительной информации: http://stackoverflow.com/q/315804/1065197 –

ответ

0

facesContext.addMessage(null, message) заканчивается на <h:messages globalOnly="true">, а не в <h:message for="...">. Обратите внимание, что globalOnly="true": not supported по телефону <h:message>.

Итак, замените

<h:message for="makeSearch" globalOnly="true" style="color:red;margin:8px;"/> 

по

<h:messages globalOnly="true" style="color:red;margin:8px;"/> 

Как к вашей попытке с фиксированным сообщение идентификатора клиента в соответствии с комментариями, что также недопустимо. Вы должны указать идентификатор клиента компонента, к которому связано сообщение, его атрибутом for, а не самим компонентом сообщения. Таким образом, вы не должны были использовать

facesContext.addMessage("detailsForm:makeSearchError", message); 

но вместо

facesContext.addMessage("detailsForm:makeSearch", message); 

В конце концов, это не нужно, если вы просто исправить <h:message> быть истинным <h:messages>.

+0

Как я писал ранее - я пробовал оба: detailsForm: makeSearch и makeSearchError - ни один из них не работал, поэтому я изменил '' на ' 'и это работает. Но мне нужна только одна ошибка на этой странице, а если мне нужно больше одного? –

+0

Просто добавьте еще одно сообщение 'addMessage()' таким же образом. '' поддерживает отображение нескольких сообщений, в отличие от '' без множества 's'. – BalusC

Смежные вопросы