我面临selectOneMenu的一个问题。我需要在下拉菜单中显示项目列表,这是必填字段。如何使用默认选择选项显示h:selectOneMenu所需的消息?
在该下拉菜单中,第一个值是“选择”。如果用户没有选择任何问题,那么我需要显示一条错误消息,如“选择任何问题”。
任何人都可以给我解决方案吗?
我面临selectOneMenu的一个问题。我需要在下拉菜单中显示项目列表,这是必填字段。如何使用默认选择选项显示h:selectOneMenu所需的消息?
在该下拉菜单中,第一个值是“选择”。如果用户没有选择任何问题,那么我需要显示一条错误消息,如“选择任何问题”。
任何人都可以给我解决方案吗?
只需将第一项的项目值设置为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)
<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>
仅仅是一个警告词:Roseindia.net是全球最差的**资源,用于学习Java EE。请将该网站添加到您的黑名单。在这种特殊情况下,Roseindia.net的文章作者显然不知道'required/requiredMessage`属性是可以/应该如何使用的。另外,那个`context.addMessage()`部分在这个上下文中是纯粹的废话。这对JSF初学者来说非常具有误导性,他们后来不恰当地抱怨JSF“非常混乱,困难和糟糕”,而只是那些“讲课”的资源是不好的。请得到一本体面的书/资源/教程。 – BalusC 2014-09-28 06:18:06
我认为 with bean.question =“Please ....”更好,因为在逻辑服务器中不会随视图更改而改变。用if(!question.equals(“请...”)){do ...} –
2016-09-07 07:13:27