轉自:http://www.cnblogs.com/xiaoyaorensheng/archive/2013/01/02/2842302.html
偶遇一個問題:org.apache.struts2.json.JSONWriter can not access a member of class
org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
with modifiers "public"。困擾了半天,找到了解決方案,寫寫自己的一些理解。
action代碼:
1 package edu.bjfu.action;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.annotation.Resource;
7
8 import org.apache.struts2.json.annotations.JSON;
9
10
11 import com.opensymphony.xwork2.ActionSupport;
12
13 import edu.bjfu.entity.Authority;
14 import edu.bjfu.service.AuthorityService;
15
16 public class AuthoritiesAction extends ActionSupport{
17 private AuthorityService authorityService;
18 private List<Authority> authorities;
19
20 public List<Authority> getAuthorities() {
21 return authorities;
22 }
23
24 public void setAuthorities(List<Authority> authorities) {
25 this.authorities = authorities;
26 }
27 public AuthorityService getAuthorityService() {
28 return authorityService;
29 }
30
31 @Resource(name="authorityService")
32 public void setAuthorityService(AuthorityService authorityService) {
33 this.authorityService = authorityService;
34 }
35
36 public String execute() throws Exception {
37 authorities=authorityService.getAllAuthorities();
38 return SUCCESS;
39 }
40
41 }
配置文件代碼:
1 <package name="super_admin" extends="json-default" namespace="/superadmin">
2 <action name="allAuthorities" class="edu.bjfu.action.AuthoritiesAction">
3 <result type="json"></result>
4 </action>
5 </package>
ajax交互代碼:
1 $(function(){
2 $.post("superadmin/allAuthorities?dt="+new Date().getTime(),
3 function(data){
4 $("#authority").empty();
5 var json = eval(data);
6 for(var i=0;i<json.length;i++){
7 $("#authority").append("<option value='"+json[i].authorityId+"'>"+json[i].authorityName+"</option>");
8 }
9 },"json")
10 })
這樣每次在交互的時候就會發生以上錯誤。
主要原因: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 }
org.apache.struts2.json.JSONWriter can not access a member of class
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
JSON、文本模板、HTML模板
騎士救兵
2019-02-24 13:26:33
AsyncHttpClient 實戰總結及思考
一劍圍城
2019-02-23 00:30:05
8.spark core之讀寫數據
菲立思教育
2019-02-23 00:14:30
python中json和字符編碼的轉換
aaabbbbttt
2019-02-22 23:53:56
android 解析json數據格式
zhaojianping
2019-02-22 23:48:00
struts2的迭代
藍色毒箭蛙
2019-02-23 13:46:03
Struts2輸入校驗總結
5fresh
2019-02-23 00:41:21
struts2日期類型轉換
chausa
2019-02-23 00:16:04
第一個Struts2例子
夜貓子java
2019-02-23 00:07:32
FreeMarker的優點和缺點
oecp123
2019-02-23 00:00:51