第一步,先定义一个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 { <span style="white-space:pre"> </span>//这里是具体验证的逻辑 } @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中添加以下代码
<validator> <validator-id>numberValidator</validator-id> <validator-class>com.xx.web.validator.NumberValidator</validator-class> </validator>
到此为止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中加入
<tag> <tag-name>validateNumber</tag-name> <validator> <validator-id>number</validator-id> <handler-class>com.xx.validator.NumberValidatorHandler</handler-class> </validator> </tag>
使用方法
<inputtext label="xxx" style="width:220px;" value="#{xx.xxValue}"> <validatenumber precision="2" scale="3"> </validatenumber></inputtext>

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

本文讨论了使用Drop Table语句在MySQL中放下表,并强调了预防措施和风险。它强调,没有备份,该动作是不可逆转的,详细介绍了恢复方法和潜在的生产环境危害。

本文讨论了在PostgreSQL,MySQL和MongoDB等各个数据库中的JSON列上创建索引,以增强查询性能。它解释了索引特定的JSON路径的语法和好处,并列出了支持的数据库系统。

文章讨论了使用准备好的语句,输入验证和强密码策略确保针对SQL注入和蛮力攻击的MySQL。(159个字符)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

记事本++7.3.1
好用且免费的代码编辑器

Atom编辑器mac版下载
最流行的的开源编辑器