让输入的
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>
<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);
}
}
}
}