2011-08-17 61 views
4

我面臨selectOneMenu的一個問題。我需要在下拉菜單中顯示項目列表,這是必填字段。如何使用默認選擇選項顯示h:selectOneMenu所需的消息?

在該下拉菜單中,第一個值是「選擇」。如果用戶沒有選擇任何問題,那麼我需要顯示一條錯誤消息,如「選擇任何問題」

任何人都可以給我解決方案嗎?

回答

11

只需將第一項的項目值設置爲null。你不應該用標籤的值來設置它。

例如

<h:selectOneMenu value="#{bean.question}" required="true" requiredMessage="Please select a question"> 
    <f:selectItem itemValue="#{null}" itemLabel="Select" /> 
    <f:selectItems value="#{bean.questions}" /> 
</h:selectOneMenu> 
+0

我認爲 with bean.question =「Please ....」更好,因爲在邏輯服務器中不會​​隨視圖更改而改變。用if(!question.equals(「請...」)){do ...} – 2016-09-07 07:13:27

-1

您也可以創建一個驗證器。

1)

<h:selectOneMenu id="giftValue" value="#{yourController.giftDO.giftValue}"> 
    <f:selectItems value="#{yourController.giftDO.giftValueMap}" /> 
      <f:validator validatorId="selectOneMenuValidator"/> 
    </h:selectOneMenu> 
    <h:message for="giftValue" errorStyle="color:red"/> 
    //where giftValue enum willcontail the word "Select" 

2)創建SelectOneMenuValidator.java

public class SelectOneMenuValidator implements Validator { 
    /* (non-Javadoc) 
    * @see javax.faces.validator.Validator#validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object) 
    */ 

    public void validate(FacesContext context, UIComponent arg1, Object value) 
      throws ValidatorException { 

     String giftValue = (String)value; 

     if(giftValue != null && giftValue.toUpperCase().equals("SELECT")){ 
      FacesMessage message = new FacesMessage(); 
      message.setSeverity(FacesMessage.SEVERITY_ERROR); 
      message.setSummary("Please Select a question!"); 
      message.setDetail("Please Select a question!");    
      context.addMessage("Please Select a question!", message);  
      throw new ValidatorException(message); 
     } 

    } 
} 

3)驗證添加到在faces-config.xml

<validator> 
    <validator-id>selectOneMenuValidator</validator-id> 
    <validator-class>net.roseindia.validations.SelectOneMenuValidator</validator-class> 
</validator> 
+3

僅僅是一個警告詞:Roseindia.net是全球最差的**資源,用於學習Java EE。請將該網站添加到您的黑名單。在這種特殊情況下,Roseindia.net的文章作者顯然不知道'required/requiredMessage`屬性是可以/應該如何使用的。另外,那個`context.addMessage()`部分在這個上下文中是純粹的廢話。這對JSF初學者來說非常具有誤導性,他們後來不恰當地抱怨JSF「非常混亂,困難和糟糕」,而只是那些「講課」的資源是不好的。請得到一本體面的書/資源/教程。 – BalusC 2014-09-28 06:18:06