日期:2014-05-17  浏览次数:20705 次

Struts2使用json返回值类型时的数据校验
我现在用的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里面调用其他方法校验,但是感觉上有些不舒服,如果实在不行就采用这个方法了,还希望大家能提供好的思路。

------解决方案--------------------
验证也返回json,然后判断不一样么。
------解决方案--------------------
别继承json-default
struts2实现的ajax验证不太好
你要ajax验证,就自己实现得了
用jQuery很简便
------解决方案--------------------
没搞明白你的意思 我的做法是在提交之前用jquery 的validate 验证一下是不是邮箱。感觉如无特殊需要 ,这种对数据格式的验证就放在前台做就好了。
------解决方案--------------------
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方法返回值,返回字符串。
------解决方案--------------------
<package name="ajax-json" extends="struts-default, json-default"> 是可以这样写的。
<interceptors>注入拦截校验的拦截器
------解决方案--------------------
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor


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