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使查出的数据多了一层关联.
但为什么就不能输出了。大虾们帮忙解决下
开始是这样做的(没出现错误)
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使查出的数据多了一层关联.
但为什么就不能输出了。大虾们帮忙解决下
解决方案 »
- 用hibernate3.0+sturts1.2做插入数据
- struts2中一个<s:form>对应两个action怎么写?
- weblogic中部署的应用程序访问https相关问题
- webservice webmethod 参数传值问题 急急
- ★★★★80分求助问题解答,牛人请进,比较难的问题!★★★★
- 求教一个jdbc问题
- spring mvc提交表单时405。第一次接触spring mvc 完全搞不懂,处处碰壁。
- 初学j2ee的疑惑?
- 如何用jdk对一个含有包的就java程序进行编译阿?
- java单例模式
- Could not load Webservice SEI
- [满意答案给100分]设计模式 Command模式求教
我记得JSONObject 会深度遍历,比如A对象中有个b对象,而b对象中有个C对象,那么他就会遍历到C对象。当然 如果C对象中再有个A对象 后果可想而知
因此,可能是遍历时出现的问题。
InvocationTargetException异常,应该是反射是出现的异常,所以 推测是你的那个类中缺少了get或set方法或者构造函数,甚至说是缺少那个类(比如说只有接口没有具体实现,而你在某类中却定义了)
<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就没有获取到值呢?