[英]JSF 2.2: extend/override default required validator
我有一种情况,我需要覆盖或扩展默认的所需验证器,以便在缺少所需值时可以在服务器端执行一些操作。
我只是通过扩展标准RequiredValidator进行了尝试,但是当提交的值不为null时,验证器只会被触发:
import static com.util.ResourceBundleHelper.getMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.RequiredValidator;
import javax.faces.validator.ValidatorException;
import org.omnifaces.util.Ajax;
@FacesValidator("com.util.validator.AjaxRequiredValidator")
public class AjaxRequiredValidator extends RequiredValidator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
//need to perform additional logic here, depending on the actual component parameter
if (value == null || value.toString().isEmpty()){
String javascriptMethod = "MODULE.error(" + component.getId() + ")";
Ajax.oncomplete(javascriptMethod);
throw new ValidatorException(getMessage("error"));
}
}
}
xhtml:
<h:inputText value="#{bean.requiredValue}">
<f:validator validatorId="com.util.validator.AjaxRequiredValidator"/>
</h:inputText>
我读到上下文参数:
<context-param>
<param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
<param-value>true</param-value>
</context-param>
但我不想在全球范围内仅针对特定组件设置此行为。 这可能吗?
以及为什么/如何在我使用时触发默认验证器:
<h:inputText value="#{bean.requiredValue}" required="true"/>
因为它没有伤害,所以我去了web.xml中的context-param解决方案:
<context-param>
<param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
<param-value>true</param-value>
</context-param>
<h:inputText value="#{bean.requiredValue}" validator="#{bean.validateRequired}"/>
public interface RequiredValidation {
default public void validateRequired(FacesContext context, UIComponent component, Object value) {
if (value == null || value.toString().isEmpty()){
String javascriptMethod = "MAINMODULE.error(" + component.getId() + ")";
throw new AjaxValidatorException(javascriptMethod,"fieldRequired");
}
}
}
@ManagedBean
@ViewScoped
public class Bean implements RequiredValidation {
private String requiredValue;
//...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.