2014-02-13 52 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.")); 
    } 
} 

一切我讀到說,對於消息的組件ID應該是:這就是爲什麼我使用homeInfo:homeId作爲我的錯誤消息。不過,我也嘗試了homeId。如果我從<rich:message ... />更改爲<rich:messages ... />,我會看到我的錯誤,但是然後我得到頁面的所有全局錯誤消息,這不是我想要的。我錯過了什麼?

+0

嘗試添加'ajaxRendered =「true」 – Makhiel

回答

0

與其他一切相反,我讀到那裏說,客戶端ID應該是<formId>:<inputId>homeInfo:homeId這沒有奏效。我試過這個方法做了哪些工作:

private UIComponent component; 

public UIComponent getComponent() { 
    return component; 
} 

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

我然後綁定的輸入組件,然後在component.getClientId()傳遞到錯誤,並且工作。在調試器中,我注意到傳入的ID是homeId。但是,如果我硬編碼homeId的clientId不起作用。最後我注意到,在一個常規驗證錯誤一切工作正常。但是,使用的ID是homeInfo-homeId。如此長的故事更短...傳入的客戶端ID應爲<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.")); 
    } 
}