仅当按下特定命令按钮时才根据需要验证输入

问题描述 投票:0回答:2
validation jsf-2 primefaces required commandbutton
2个回答
12
投票

让输入的

required
属性检查是否按下了保存按钮(可以通过隐式 EL 变量
#{param}
所提供的请求参数映射中其客户端 ID 的存在来识别)。

<h:form>
    <p:inputText ... required="#{param.containsKey(save.clientId) and myBean.required}" />
    
    <p:commandButton binding="#{save}" ... />
</h:form>

(注意:不要将其绑定到 bean 属性!代码按原样)

这样它只会在实际按下保存按钮时评估

true

或者,如果您对

binding

 有问题和/或对按钮的客户端 ID 进行硬编码没有问题:

<h:form id="formId"> <p:inputText ... required="#{param.containsKey('formId:buttonId') and myBean.required}" /> <p:commandButton id="buttonId" ... /> </h:form>
    

2
投票
如果输入为空,只需在接受输入时删除必需的属性即可。然后编写一个自定义验证器,它只接受空输入或数字输入。

<p:inputText id="input" value="#{myBean.value}" maxlength="20" disabled="#{myBean.disabled}" validator="customerNumericInputValidator"> <p:ajax event="blur" process="@this" update="name" listener="#{myBean.listener}"/> </p:inputText>
public class customerNumericInputValidator implements Validator {

    @Override
    public void validate(FacesContext facesContext, UIComponent uIComponent,
            Object object) throws ValidatorException {

        String number = (String) object;
        number = Strings.nullToEmpty(number).trim();

        //if the request is a full request then number can not be empty
        if(!FacesContext.getCurrentInstance().isPostback() && Strings.isNullOrEmpty(number))
        {
             FacesMessage message = new FacesMessage();
             message.setSummary(Messages.getMessage("error empty value"));
             message.setSeverity(FacesMessage.SEVERITY_ERROR);
             throw new ValidatorException(message);
        } 

        if(!Strings.isNullOrEmpty(number))
        { 
            if(!isNumber(number))
            {
               FacesMessage message = new FacesMessage();
               message.setSummary(Messages.getMessage("error not numerical value"));
               message.setSeverity(FacesMessage.SEVERITY_ERROR);
               throw new ValidatorException(message);
            }
        }
    }

}
    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.