Validate input as required only if certain command button is pressed

久未见 提交于 2019-12-03 03:59:55

Let the input's required attribute check if the save button is pressed or not (which can be identified by the presence of its client ID in the request parameter map).

<h:form>
    <p:inputText ... required="#{not empty param[save.clientId] and myBean.required}" />

    <p:commandButton binding="#{save}" ... />
</h:form>

(note: do not bind it to a bean property! the code is as-is)

This way it would only evaluate true when the save button is actually pressed.

Or, if you have problems with binding and/or don't have a problem hardcoding the button's client ID:

<h:form id="formId">
    <p:inputText ... required="#{not empty param['formId:buttonId'] and myBean.required}" />

    <p:commandButton id="buttonId" ... />
</h:form>

Just remove the required attribute as you accept the input if the input is empty. Then write a custom validator which accepts only empty input or numerical input.

<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);
        }
    }
}

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!