2011-08-17 60 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