我现在用的Struts2框架,在登录的时候验证登录账号是不是邮箱格式,由于使用JS框架封装的Ajax提交方式,所以struts.xml的该Action配置继承了json-default,返回值类型为json,这样struts的数据校验就无法使用了,但业务还必须要实现这一功能,希望大家帮帮忙,例子如下
<!-- 用户登录 -->
<package name="simjson" extends="json-default">
        <action name="loginAction" class="cn.xx.xxx.action.LoginAction"  method="login" >
            <result type="json"></result>
</action>
如果使用struts2的数据校验,返回值是一个“input”字符串,但是我的Action返回的是一个json类型的字符串,报“couldn't find action or result”的异常
本想在Action里面调用其他方法校验,但是感觉上有些不舒服,如果实在不行就采用这个方法了,还希望大家能提供好的思路。

解决方案 »

  1.   

    验证也返回json,然后判断不一样么。
      

  2.   

    别继承json-default
    struts2实现的ajax验证不太好
    你要ajax验证,就自己实现得了
    用jQuery很简便
      

  3.   

    struts2的验证返回的是“input”,不是json类型的,呵呵
      

  4.   

    我现在就是用的jquery封装的Ajax,可能我表达的意思有歧义,呵呵,我的意思是登录的时候在后台校验他输入的账号是不是一个邮箱格式,如果是邮箱格式的就去验证密码,否则返回错误信息,本想使用struts2自己的校验机制,觉着方便,所以遇到问题了,呵呵
      

  5.   

    没搞明白你的意思 我的做法是在提交之前用jquery 的validate 验证一下是不是邮箱。感觉如无特殊需要 ,这种对数据格式的验证就放在前台做就好了。
      

  6.   

    LoginAction中校验即可。校验登录账号不是邮箱格式返回一个字符串。LoginAction校验方法:1.定义邮件格式:
    private static final String emailRegEx = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+(\\.[A-Za-z0-9-]+)*((\\.[A-Za-z0-9]{2,})|(\\.[A-Za-z0-9]{2,}\\.[A-Za-z0-9]{2,}))$";2.邮件格式校验方法:
    public boolean regex(String value) { Pattern p = null; p = Pattern.compile(emailRegEx); Matcher m = p.matcher(value); boolean blnFlag = m.find(); return blnFlag;
    }3.判断regex方法返回值,返回字符串。
      

  7.   

    <package name="ajax-json" extends="struts-default, json-default"> 是可以这样写的。
    <interceptors>注入拦截校验的拦截器
      

  8.   

    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor
    可以试试。
      

  9.   

    说是前台后台都要验证,就是前台验证了之后在Action里面再次验证,这是要求,我就必须实现,所以问题产生了。
      

  10.   

    可以这样继承的话下面怎么写呢
    <action name="loginAction" class="cn.xx.xxx.action.LoginAction"  method="login" > 
    <result type="json"> </result><!--邮箱格式正确时-->
    <result name="input">login.jsp</result><!--邮箱格式错误时-->
    </action>
    这样配置xml可以吗?
      

  11.   

    用json不是一定要type="json"的。
    你可以在action里手动把数据做成json格式。
      

  12.   

    long类型的值转换为json   value没有""。 我有一个long test=4101291232000000001 放进json没有加引号,在js中解析错误,由于数值长度太大了。怎么解决?