f:validateRequiered无法按预期工作

时间:2011-10-09 01:52:07

标签: jsf-2

我刚刚用JSF 2.0创建了一个NetBeans项目,我遇到了f:validateRequired的问题。豆子

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean
@RequestScoped
public class TestBean {
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String action() {
        return "test";
    }
}

和页面

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Test</title>
        <h:outputStylesheet name="css/stylesheet.css" />
    </h:head>
    <h:body>
        <h:form>
            <div id="content">
                Value:
                <h:message for="test" />
                <h:inputText value="#{testBean.value}" id="test">
                    <f:validateRequired />
                </h:inputText>
                <br/>
                <h:commandButton action="#{testBean.action}" value="Action" />
            </div>
        </h:form>
    </h:body>
</html>

似乎没问题,但是直到我在inputText上提供了requered =“true”属性才会出现h:消息。我错过了什么?为什么验证不会出现在requered =“true”属性之外?

2 个答案:

答案 0 :(得分:5)

我想出了答案:默认情况下,根本没有验证具有空输入的字段。如果您想验证此类字段,则必须设置required=true。见UIInput.validateValue() JavaDoc

您可以通过将javax.faces.VALIDATE_EMPTY_FIELDS上下文参数设置为true来启用空字段的验证。见JavaDoc。完成后,上面的示例按预期工作。

答案 1 :(得分:2)

我知道这篇文章有点陈旧,但我正在使用MyFaces,显然javax.faces.VALIDATE_EMPTY_FIELDS默认设置为false。