论坛首页 入门技术论坛

少了一点儿(客户端静态验证)

浏览 1468 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-08  

<!----><!----> <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"\@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> <!---->

这里主要是两个问题,一个是如何得到 action uri 对应的 classname ,比较难,看了 struts2 源代码,找了好多方法,因为是 annotation 的方式验证,所以都不太成功,不知有没有找这个的代码。最后在 Form.java 里看到, evaluateExtraParamsServletRequest 方法里, addParameter("actionClass", clazz) ,发现其实是可以直接得到 classname 的。在 ValidtaionUtils 里加代码(其实并不好,只是为了减少 VM 中的代码,毕竟 VM 里写逻辑并不太好写)

public String toJQueryValidRule(Annotation annotation) {

       String rule = "" ;

       String vname = annotation.annotationType().getSimpleName();

       String v = (String) Validators .get(vname);

       if (vname.equals( "RequiredStringValidator" )) {

           // RequiredStringValidator. 没什么特殊的

           rule = rule + v + ": true" ;

       } else if (vname.equals( "IntRangeFieldValidator" )) {

           // min max

          

           rule = rule + "min :"

                  + (( IntRangeFieldValidator ) annotation).min() + "," ;

           rule = rule + "max :"

                  + (( IntRangeFieldValidator ) annotation).max() + "," ;

           rule = rule + v + ": true" ;

       } else if (vname.equals( "RequiredFieldValidator" )) {

           rule = rule + "required : true" ;

       }

       return rule;

    }

这里也只是根据思路的例子,只验证了 required intrange ,其它的需要根据 jquery 再写。

而且这么写也不一定是好的方式,只是个思路吧。

 

其它的话,就是在页面头部加入 jquery js ,用 sitmesh 加也行,这里就直接写了。三个部分:

<script src="/struts2/js/jquery.form.js" type="text/javascript"></script>

<script src="/struts2/js/jquery.validate.js" type="text/javascript"></script>

<script src="/struts2/js/messages_cn.js" type="text/javascript"></script>

这样,就可以中文了,如果不想再改什么的话,就不用写 messages 部分是,当然,它还可以用 class 的方式进行验证,不好加,但我想如何代码写得好的话,还可以减少不少代码。

 

这样,我们就可以用 jquery 或其它的框架,在浏览器端静态验证了。

 

当然,所有都只是个思路,还没有考虑以 xml 方式写 validation 的方式,以及前面说的用 css class 名字来进行表示的方式,以及改变 style 以改变显示验证的样式什么的。

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics