对一个输入框的输入进行验证,只允许字母和数字,开始是用了<t:validateRegExpr pattern="[A-Za-z0-9]+" message="...".../>, 但后来由于一些原因只得用javascript进行所有的验证。
奇怪的是用/^[\w]+$/ test时完全正确,而/[A-Za-z0-9]+$/则永远是true
- 17:56
- 浏览 (105)
- 评论 (0)
- 分类: javascript学习
今天看到一个网站上的一个有关jsf中的immediate的讨论,一般我们都会认为对于command...和inputinput...immediate的处理是不同的,但有一个人认为其实他们都是相同的,不同的是对于command来说action会提前调用(先于validator),因为action的导航作用才使得页面跳过了后面的验证。听起来有些道理,我特地实验了一下,就是去掉action的返回值,结果证明他的观点是错误的。
今天看core javaserver faces终于知道了原因,因为所有action,不论immediate=true 或者false,都会直接调用Render Respo ...
当ajaxSingle为true时,只是提交当前组件,而对于其他组件是不提交的,它的附带效果就是只对当前组件进行验证,而对其他的组件不会作任何验证。这一点上对于button和link来说感觉和immediate="true"的效果很相似,即跳过所有验证,当然只是效果除此以外它们完全是不同的。
不知道a4j是如何实现的,因为a4j还是遵循jsf的生命周期的,所以估计会有这么一句:FacesContext.getCurrentInstance().renderResponse(),也不知到哪有源码下。
在a4j:support中也有immediate=true 这个属性,工作流程和jsf一样。
作为输入组件,如UInput, immediate="true"时验证会提前,不过我感觉这好像没什么用,因为本来第三步就会执行验证了,提不提早都一样。它的另外一个效果是valueChangeListener会先于第三步process validate 验证执行,这点倒是满有用的。而一般情况下valueChangeListener会在值改变并且通过验证之后即invoke applications阶段才执行,当然会先于action执行的。







评论排行榜