jsf1.2/facelet1.x 中convertor的自定义
程序员文章站
2022-03-19 19:50:24
...
第一步,先定义一个validator继承jsf中的validator,如果需要有状态就必须实现StateHolder接口 package com.xx.web.validator;import javax.faces.component.StateHolder;import javax.faces.component.UIComponent;import javax.faces.context.FacesContext
第一步,先定义一个validator继承jsf中的validator,如果需要有状态就必须实现StateHolder接口
package com.xx.web.validator;
import javax.faces.component.StateHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
public class NumberValidator implements Validator, StateHolder {
private int precision = 10;
private int scale = 6;
private boolean mustPositive = true;
public NumberValidator() {
}
public void setPrecision(int precision) {
this.precision = precision;
}
public void setScale(int scale) {
this.scale = scale;
}
public void setMustPositive(Boolean mustPositive) {
this.mustPositive = mustPositive;
}
@Override
public void validate(FacesContext context, UIComponent component,
Object value) throws ValidatorException {
//这里是具体验证的逻辑
}
@Override
public Object saveState(FacesContext context) {
Object values[] = new Object[3];
values[0] = precision;
values[1] = scale;
values[2]= mustPositive;
return (values);
}
@Override
public void restoreState(FacesContext context, Object state) {
Object values[] = (Object[]) state;
precision = (Integer) values[0];
scale = (Integer) values[1];
mustPositive=(Boolean)values[2];
}
@Override
public boolean isTransient() {
return false;
}
@Override
public void setTransient(boolean newTransientValue) {
}
}
在faces-confg.xml中添加以下代码
numberValidator com.xx.web.validator.NumberValidator
到此为止validator已经可以使用了
但是上面的参数无法添加
因为我们使用了facelet,所以要定义一个facelet的tag
package com.xx.web.validator; import javax.faces.validator.Validator; import com.sun.facelets.FaceletContext; import com.sun.facelets.tag.TagAttribute; import com.sun.facelets.tag.jsf.ValidateHandler; import com.sun.facelets.tag.jsf.ValidatorConfig; public class NumberValidatorHandler extends ValidateHandler { private final TagAttribute precisionAttr; private final TagAttribute scaleAttr; private final TagAttribute mustPositiveAttr; public NumberValidatorHandler(ValidatorConfig config) { super(config); precisionAttr = this.getAttribute("precision"); scaleAttr = this.getAttribute("scale"); mustPositiveAttr = this.getAttribute("mustPositive"); } @Override protected Validator createValidator(FaceletContext ctx) { NumberValidator result = (NumberValidator) ctx.getFacesContext() .getApplication().createValidator("number"); if (precisionAttr != null) result.setPrecision(Integer.valueOf(precisionAttr.getValue(ctx))); if (scaleAttr != null) result.setScale(Integer.valueOf(scaleAttr.getValue(ctx))); if (mustPositiveAttr != null) result.setMustPositive(Boolean.valueOf(mustPositiveAttr .getValue(ctx))); return result; } }然后在taglib.xml中加入
validateNumber number com.xx.validator.NumberValidatorHandler
使用方法
上一篇: Gulp命令生成精灵图
下一篇: Oracle ASM实例的aud文件问题
推荐阅读
-
浅谈自定义注解在Spring中的应用
-
Spring配置shiro时自定义Realm中属性无法使用注解注入的解决办法
-
WordPress中设置Post Type自定义文章类型的实例教程
-
Spring MVC中基于自定义Editor的表单数据处理技巧分享
-
IOS 中NSUserDefaults读取和写入自定义对象的实现方法
-
iOS中给自定义tabBar的按钮添加点击放大缩小的动画效果
-
iOS中UIAlertController设置自定义标题与内容的方法
-
Spring Boot下如何自定义Repository中的DAO方法
-
Spring Data MongoDB中实现自定义级联的方法详解
-
详解 Android中Libgdx使用ShapeRenderer自定义Actor解决无法接收到Touch事件的问题