2014-02-13 4 views
0

Я разрабатываю сайт JSF и борюсь с сообщениями об ошибках. Я хочу отображать сообщения в двух местах. Должно быть глобальное сообщение об ошибке, чтобы поймать все (это работает), а другое должно улавливать сообщения для определенного ввода ... вот где у меня проблемы. Вот моя форма:jsf rich: сообщение не отображается ошибка

<h:form class="form" id="homeInfo"> 
    <h:panelGroup layout="block" styleClass="#{HomeBean.hasResults ? 'disabled': ''}"> 
     <fieldset data-role="controlgroup" class="multi-line"> 
      <legend>#{homeBean.homeIdLable}</legend> 
      <h:inputText id="homeId" value="#{homeBean.homeId}" placeholder="Optional" 
         styleClass="#{HomeBean.hasResults ? 'disabled': 'required'}"/> 
      <rich:message for="homeId" styleClass="inline-error" /> 
     </fieldset> 
     <br/> 
     <a4j:commandButton id="submit" value="Submit" styleClass="ui-btn-up-undefined ui-btn" 
          action="#{homeController.matchHomeId(HomeBean.vin)}" 
          disabled="#{homeBean.hasResults}" 
          render="#{empty facesContext.messageList ? 'homeList':''}" 
          onbegin="displayBusy()" 
          oncomplete="displayBusy('', true); matchHomeId(#{homeBean.hasResults});"/> 
     <br/> 
    </h:panelGroup> 
</h:form> 

А вот моя логика в контроллере, который бросает ошибку на недопустимом homeId:

public void matchHomeId(String homeId) { 
    if (validHomeId) { 
     do logic .... 
    } else { 
     getFacesContext().addMessage("homeInfo:homeId", 
       new FacesMessage(FacesMessage.SEVERITY_ERROR, "The home ID you entered is not valid.", "The home ID you entered is not valid.")); 
    } 
} 

Все, что я прочитал говорит, что компонент идентификатор сообщения должен быть: поэтому я использую homeInfo: homeId для моего сообщения об ошибке. Тем не менее, я также попробовал просто homeId. Если я перехожу из <rich:message ... /> в <rich:messages ... />, я вижу, что моя ошибка очень хорошая, однако затем я получаю все глобальные сообщения об ошибках для страницы, чего я не хочу. Что мне не хватает?

+0

Попробуйте добавить 'ajaxRendered =" true "' – Makhiel

ответ

0

Вопреки всем остальным, я прочитал там, где указано, что идентификатор клиента должен быть <formId>:<inputId> или homeInfo:homeId. Это не сработало. Я попробовал этот подход, который сделал работу:

private UIComponent component; 

public UIComponent getComponent() { 
    return component; 
} 

public void setComponent(UIComponent component) { 
    this.component = component; 
} 

Я тогда связанный вход к компоненту, а затем передается в component.getClientId() к ошибке, и что работало. В отладчике я заметил, что идентификатор передается в homeId. Однако, если я жестко закодировал homeId для clientId, который не работал. Наконец, я заметил, что при обычной проверке ошибки все работало нормально. ОДНАКО, идентификатор, который использовался, - homeInfo-homeId. Столь длинный рассказ короче ... идентификатор клиента прошел в должно быть <formId>-<inputId>

public void matchHomeId(String homeId) { 
    if (validHomeId) { 
     do logic .... 
    } else { 
     getFacesContext().addMessage("homeInfo-homeId", 
       new FacesMessage(FacesMessage.SEVERITY_ERROR, "The home ID you entered is not valid.", "The home ID you entered is not valid.")); 
    } 
} 

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

  • Нет связанных вопросов^_^