我在使用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>
<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>
required/requiredMessage
属性应该如何使用。而且,在这种情况下,context.addMessage()
部分完全是无意义的。这些都会给JSF初学者带来误导,之后他们无权地抱怨JSF“太令人困惑、难以理解和糟糕”,而实际上只是那些“讲课”的资源糟糕。请寻找一本好的书籍/资源/教程。 - BalusC