如何在默认选择选项时显示h:selectOneMenu的必需消息?

6
我在使用selectOneMenu时遇到了一个问题。我需要在下拉列表中显示项目列表,并且这是一个必填字段。
在下拉列表中,第一个值是“选择”。如果用户没有选择任何问题,则需要显示一个错误消息,如“选择任何问题”。
有人可以给我解决方案吗?
2个回答

16

只需将第一项的项目值设置为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>

1
我认为<f:selectItem itemLabel="#{bean.question}" />与bean.question = "Please...."更好,因为在逻辑服务器中不会随着视图的更改而改变。如果(!question.equals("Please...")) {do...} - Juan Camilo Camacho Beltrán

-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> 

4
警告一下:Roseindia.net是学习Java EE方面最差的资源。请将该网站添加到您的黑名单中。在这种情况下,Roseindia.net的文章作者明显不知道required/requiredMessage属性应该如何使用。而且,在这种情况下,context.addMessage()部分完全是无意义的。这些都会给JSF初学者带来误导,之后他们无权地抱怨JSF“太令人困惑、难以理解和糟糕”,而实际上只是那些“讲课”的资源糟糕。请寻找一本好的书籍/资源/教程。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接