我正在尝试只显示两个所需的字段。 目前,如果两个字段都为空,则会有两条错误消息。我想实现只有一个消息,如果两个或只有一个字段为空。
代码如下所示:
<x:inputText
value="#{bean.proxyUrl}"
id="idProxyUrl"
required="true"
/>
<x:outputText value=":" />
<x:inputText
value="#{bean.proxyPort}"
id="idProxyPort"
required="true"
/>
<x:message for="idProxyUrl" errorClass="errorMessage" style="margin-left: 10px;" />
<x:message for="idProxyPort" errorClass="errorMessage" style="margin-left: 10px;" />
我该怎么办呢,无论一个或两个字段是否为空,我只收到一条消息。
答案 0 :(得分:2)
您可以为第二个组件指定一个特殊验证器,用于检查第一个组件的SubmittedValue。我为PasswordValidator做了类似的事情,检查了相应的确认密码字段。
@FacesValidator("passwordValidator")
public class PasswordValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component,
Object value) throws ValidatorException {
String password = (String) value;
UIInput confirmComponent = (UIInput) component.getAttributes().get("confirm");
String confirm = (String) confirmComponent.getSubmittedValue();
if (password == null || password.isEmpty() || confirm == null || confirm.isEmpty()) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Please confirm password", null);
throw new ValidatorException(msg);
}
if (!password.equals(confirm)) {
confirmComponent.setValid(false);
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "The entered passwords do not match", null);
throw new ValidatorException(msg);
}
}
您必须检查其他组件的Submitted Value的原因是因为在生命周期的Process Validations阶段调用验证器。在完成此阶段并且每个提交的值都已通过验证之后,才会应用任何已提交的值。