现在的位置: 首页 > 综合 > 正文

struts2 ajax验证用户名是否存在

2013年10月11日 ⁄ 综合 ⁄ 共 1574字 ⁄ 字号 评论关闭

struts2 ajax验证用户名是否存在收藏


       做注之前曾经写过一个使用struts2的ajax标签动态验证用户名是否存在的例子。这回做注册页面找来使用,发现有一点缺陷。当ajax标签进行异步请求时,会提交当前表单。而当前表单使用了JavaScript进行了用户名是否为空等的验证,直接异步提交表单进行验证用户名时可能会因为JavaScript阻止而无法提交导致动态验证失败。


    改进的方法:另外建立一个表单,里边放一个隐藏文本域。通过JavaScript方法及onChange事件同步用户名文本框和隐藏文本域的值。然后对用户名文本框onBlur事件进行异步提交那个表单,并将返回的html代码显示在指定的位置上。

    下边是涉及的html代码部分
  1. <script type="text/javascript">
  2.   //将id1的值赋给id2对象
  3.   function copyValue(id1, id2){
  4.       getObj(id2).value=getObj(id1).value;
  5.   }
  6. </script>
  7. <!--为异步提交定义需要的url-->
  8. <s:url id="userUrl" action="regist" method="checkUser"/>
  9. <!--定于需要的表单-->
  10. <form id="form">
  11.     <input type="hidden" name="id" id="idCopy">
  12. </form>
  13. <!--看官方文档吧,懒得解释了-->
  14. <sx:bind targets="idInfo "formId="form" sources="id" href="%{userUrl}" events="onblur" indicator="indicator"/>
  15. <s:textfield id="id" name="id" maxlength="10" theme="simple" onchange="copyValue('id', 'idCopy')"/>
  16. <!--这个是指示器,当请求未完成时显示这个图片-->
  17. <img id="indicator" src="image/indicator.gif" style="display:none;vertical-align:middle;"/>
  18. <!--这个是显示信息的目标-->
  19. <span id="idInfo">请输入你要注册的用户名</span>


    然后是action,这回采用直接把代码写入stream的方式。
  1. public String checkUser() {
  2.         String info;
  3.         if (getUserDao().get(getId()) != null) {
  4.             info = "<img src='image/error.gif' style='vertical-align:middle;'/>";
  5.         }
  6.         else {
  7.             info = "<img src='image/ok.gif' style='vertical-align:middle;'/>";
  8.         }
  9.         setInputStream(new StringBufferInputStream(info));
  10.         return "check";
  11.     }


    然后是对应的action的配置
  1. <action name="regist" class="regist">
  2.      <result name="check" type="stream"></result>
  3. </action>


    每次当用户名文本框失去焦点时,旁边就会显示用户是否已被注册的信息

抱歉!评论已关闭.