ssh集成ajax总结

  • Post author:
  • Post category:其他


一.struts中的配置

配置ajax的方式有两种

第1种:package标签extends  “json-default”  方式.

第2种:但如果当前package确实无法继承”json-default”的话,还可以

在当前package中定义result-type,将json给加进去

,如下:

<result-types>
    <result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>

详细举例:

<struts>
    <package name="json-default" extends="struts-default">
        <result-types>
            <result-type name="json" class="org.apache.struts2.json.JSONResult"/>
        </result-types>
        <interceptors>
            <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
        </interceptors>
    </package>
</struts>
因为name为"json"的result type是在json-default中定义的,所以,从json-default继承就可以使用json这个result。另外json-default还定义了一个name为"json"的interceptor。

另外,依json-default的定义来看,方法2中还应该再加一个json的interceptor定义才比较合适。

二.调试时确保编译后的文件在XXX/WebContent/WEB-INF/classes目录下,否则可能会报

There is no Action mapped for action name loginAction. - [unknown location]

  并且,要确保有 struts2-json-plugin-2.3.1.2.jar  这个文件,不然会报上面同样的错误

三.报错:

org.apache.struts2.json.JSONWriter can not access a member of class 
org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
with modifiers "public"。

主要原因:struts会将action中定义的一些变量序列化转换成json格式,需要调用对象的一系列get方法(例子中调用

authorityService



authorities的get方法

),并调用以上两个变量的成员变量的get方法将其内容组成json格式。但是在序列化authorityService时,由于其成员变量中含有含有接口所以会报错。

解决方案:

1.修改配置文件:指定序列化的根节点,这样data就是从authorities的根节点以下的数据,不需要用data.authorities

1     <package name="super_admin" extends="json-default" namespace="/superadmin">
2         <action name="allAuthorities" class="edu.bjfu.action.AuthoritiesAction">
3             <result type="json"><param name="root">authorities</param></result>
4         </action>
5     </package>

2. 修改java代码:让编译器不对authorityService序列化

1     @JSON(serialize=false)
2     public AuthorityService getAuthorityService() {
3         return authorityService;
4     }

3.此外貌似可以通过配置文件的excude和include来指定需要序列化的对象



版权声明:本文为chen_815原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。