Struts2+Ibatis做的小样例,用到jqueryEasyUI的dataGrid去做分页
开始是这样做的(没出现错误)
User.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<resultMap id="result" class="com.tq365.vo.User">
   <result property="uid" column="uid"></result>
   <result property="uname" column="uname"></result>
   <result property="upwd" column="upwd"></result>
   <result property="addressList" column="uid" select="address.findByUid"></result>
</resultMap>
<resultMap id="address_result" class="com.tq365.vo.Address">
   <result property="id" column="id"></result>
   <result property="address" column="address"></result>
   <result property="code" column="code"></result>
   <result property="user" column="uid" select="findUserByID"></result>
</resultMap>
<!--分页查询部分 -->
    <select id="findAllUserCount" resultClass="int">
        select count(*) from t_user
    </select>
   ---------------------此处-----------------------
    <!--注意此处是com.tq365.vo.User-->
    <select id="findPageUser" parameterClass="int" resultClass="com.tq365.vo.User">
        select u.* from t_user u limit #start#,5
    </select><!--关联查询 -->
    <select id="address.findByUid" resultMap="address_result" parameterClass="int">
        select * from t_address where uid=#uid#
    </select>
 <!-- Address部分 -->
    <!--根据ID查询-->
<select id="findAddressByID" parameterClass="int" resultMap="address_result">
select * from t_address where id=#id#
</select>
</sqlMap>
UserAction.java中的分页方法 public String ajaxGrid() throws Exception{
int pageNo=0;
if(page!=0){
pageNo=page;
}
pages=userDao.getUserByPageNo(pageNo);

HttpServletResponse response=(HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
//必须加上,防止前端从JSON中取出的数据成乱码
response.setCharacterEncoding("UTF-8");  
    PrintWriter out=response.getWriter();
  
//JSONObject纯对象
JSONObject jsonObject=new JSONObject();
jsonObject.put("total", pages.getTotalCount());
jsonObject.put("rows", pages.getPageList());
out.print(jsonObject.toString());
System.out.println("-------"+jsonObject);-------------------------打印json

return null;
}
这样可以顺利地打印符合JqueryEasyUI官方json格式
{"total":42,"rows":[{"addressList":[],"uid":1,"uname":"tom","upwd":"123"},{"addressList":[],"uid":3,"uname":"修改后的姓名111","upwd":"111"},{"addressList":[],"uid":4,"uname":"阿杰","upwd":"545654"},{"addressList":[],"uid":5,"uname":"tom","upwd":"1232"},{"addressList":[],"uid":6,"uname":"archie","upwd":"111"}]}
前台也能显示数据。一切正常。但是发现addressList为空,所以也要把它查出来(当然这不是一时的好奇,好奇害死猫,只是以后做数据关联时也要用到)
所以就把上面   ---------------------此处-----------------------的resultClass
改成了resultMap="result"这样都可以查出来,
运行但是页面无数据显示
打断点调试发现数据是查出来了,但走到输出json那一步时跳到跳到DefaultActionInvocation.class(jar包中的)的InvocationTargetException代码部分(只是调试出现,正常后台,页面都无异常)无论是resultClass和resultMap数据都能查出来,只是resultMap使查出的数据多了一层关联.
但为什么就不能输出了。大虾们帮忙解决下

解决方案 »

  1.   

          不太清楚具体原因,按照你的叙述,可以排除ibatis和easyui的问题。
           我记得JSONObject 会深度遍历,比如A对象中有个b对象,而b对象中有个C对象,那么他就会遍历到C对象。当然   如果C对象中再有个A对象    后果可想而知
           因此,可能是遍历时出现的问题。
          
           InvocationTargetException异常,应该是反射是出现的异常,所以   推测是你的那个类中缺少了get或set方法或者构造函数,甚至说是缺少那个类(比如说只有接口没有具体实现,而你在某类中却定义了)
      

  2.   

    <resultMap id="result" class="com.tq365.vo.User">
       <result property="uid" column="uid"></result>
       <result property="uname" column="uname"></result>
       <result property="upwd" column="upwd"></result>
       <result property="addressList" column="uid" select="address.findByUid"></result>
    </resultMap>
    <resultMap id="address_result" class="com.tq365.vo.Address">
       <result property="id" column="id"></result>
       <result property="address" column="address"></result>
       <result property="code" column="code"></result>
       <result property="user" column="uid" select="findUserByID"></result>
    </resultMap>你的意思是addressList的值是通过在address.findByUid 查询的时候 
    根据上面的uid来当做条件进行查询 就没有查询出结果来
    那是不是在address.findByUid这里查询的时候uid就没有获取到值呢?