目前的代码看起来不错,假设它们都放在 <h:column> 内(但不一定是 same 列),所以问题出在其他地方。
如果您毕竟只是想验证该值是否已填充,那么您只需将required="true" 添加到相关组件中。
<h:inputSomething required="true" />
如果您想覆盖默认的必需消息,请使用 requiredMessage 属性(仅限 JSF 1.2 起)
<h:inputSomething required="true" requiredMessage="Please enter value!" />
...或在application 的message-bundle 中使用以下行提供自定义messages.properties faces-config.xml
javax.faces.component.UIInput.REQUIRED = Please enter {0}.
...{0} 可通过以下方式控制(仅从 JSF 1.2 开始,否则为 clientId)。
<h:inputSomething label="This field" />
或者如果你毕竟想要一个自定义验证器,那么你需要实现javax.faces.validator.Validator,在faces-config.xml中注册为validator
<validator>
<validator-id>myValidator</validator-id>
<validator-class>com.example.MyValidator</validator-class>
</validator>
...并通过validator属性将其附加到输入组件
<h:inputSomething validator="myValidator" />
...或f:validator facet(以便您可以将多个验证器附加到一个组件)
<h:inputSomething>
<f:validator validatorId="myValidator" />
</h:inputSomething>
在实现的validate() 方法中,只要需要throw ValidatorException 和所需的FacesMessage。
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (value does not match some condition) {
throw new ValidatorException(new FacesMessage("Please enter valid value"));
}
}
然后它会自动显示在相关的消息组件中。