gpt4 book ai didi

java - JSF 针对两个必填输入字段发出一条错误消息

转载 作者:行者123 更新时间:2023-11-30 04:39:32 24 4
gpt4 key购买 nike

我正在尝试仅显示两个必填字段之一。目前,如果两个字段都为空,则会出现两条错误消息。我希望实现的是,如果两个字段或只有一个字段为空,则只有一条消息。

代码如下所示:

<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;" />

我该怎么办,无论一个或两个字段为空,我都只会收到一条消息。

最佳答案

您可以为第二个组件指定一个特殊的 validator 来检查第一个组件的 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);
}


}

您必须检查其他组件的提交值的原因是因为 validator 是在生命周期的“流程验证”阶段调用的。在此阶段完成并且每个提交的值都通过验证之前,不会应用任何提交的值。

关于java - JSF 针对两个必填输入字段发出一条错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12640705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com