String xslquery = request.getParameter("xslquery");
String queryhql = "";
if (xslquery != null && !xslquery.equals("")) {
queryhql = (String)session.getAttribute(xslquery);
if(queryhql==null){
return null; //如果没哟找到hql语句,则失败
}
}
Session sessionHib = sessionFactory.openSession();
List<Object> result = (List<Object>)sessionHib.createQuery(queryhql).list();
代码说明:这段代码是一个servlet(用于Ajax方式把列表内容导入Excel)。因为 查询的列表需要一个hql语句。我把hql语句保存到了Session.setAttribute("usersHql",usersHql);。 点导出Excel按钮时。通过Ajax我会把usersHql发送到servlet。然后就通过session.getAttribute("usersHql")得到了这条hql语句。那么现在我想通过hibernate查询到结果,然后通过jxl写到Excel中。但是问题在于,我这是个通用的处理代码。得到的结果集是List<Object>。 那怎样遍历每个字段呢??
我想把具体的类,例如:com.test.User 作为参数通过ajax传过来。然后强转,通过反射得到User的每个字段。思路是这样,但是不知道怎样强转啊??比如遍历:result
for (Iterator iterator = result.iterator(); iterator.hasNext();) {
Object obj = (Object) iterator.next();
//!!!!!!!! 这里把obj 强转为 com.test.User。 但是这个com.test.User知识个字符串啊???
//接下来通过反射调用所有的get方法(返回值要是String)
}高手求解。
解决方案 »
- mysql删除表中数据
- 一个session问题.期待高手解答,高手哦
- 我在配置struts2中的struts2.xml为什么会出现问题
- 【毕业设计求助】怎么实现验证jsp中输入框值的数据类型
- OpenCms源代码的目录组织
- 如何保证http访问安全性
- hibernate连接数据库问题(在线等呀,谢谢个位大狭)
- JAVA---将JSP页面的信息导入到Word文件里去。。。
- 请问JAVA中如何生成PDF文件
- 请问如何着手学j2ee, 我的基础Java程序设计(略懂),html,xml,请推荐些从入门到精通的书好吗?
- ------------------------>one2one单向关联,外键为空<------------------------
- 帮帮啊,JAVA SE调用JBOSS中的EJB3出错,使用EntityManagerFactory
把 list 方法重写下吧
返回 List<T> 就满足你的要求了吧
Object obj = (Object) iterator.next(); Class cls = obj.getClass();
Field[] fields = cls.getFields(); //fields已经得到了CLASS的的每个字段了,然后通过反射来取得相应的值就可以了。
}
public static void main(String[] args) {
String aa = new String("aaa");
Object bb = (Object)aa;
System.out.println(bb.getClass());
}
}结果:class java.lang.String恩,行啊!
package com.pal.util;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.fendou.platform.struts.util.BaseAction;/**
* 此类需要"严格的"遵循特定的规则才能生效。
* 例如:对于用户列列表的导出:
* 1.需要在 UserListAction 中 把查询hql 语句 session.setAttribute("userListHql",userListHql);
* 2.此类用于Ajax,jsp页面需要通过Ajax传递 xslquery="userListHql"
* 3.通过session.getAttribute("userListHql")得到hql语句;通过Hibernate 得到对应的 Object集合(其实是PO,User集合)。
* 4.遍历Object集合,通过.getClass得到它是:com.fendou.authority.dao.po.User;
* 5.通过处理字符串构造字符串:com.fendou.autority.service.impl.UserHelper。
* 6.截取userHelper,通过Spring的BeanFactory.getBean()来new UserHelper对象。
* 7.通过反射得到 UserHelper中方法名含有 PoToVo的方法,就得到了userPoToVo()。
* 8.执行userPoToVo得到UserVo对象。
* 9.通过反射去得到 UserVo 的 formatExcel(),和formatTitle()方法。得到Map和List
* 10.通过JXL构造Excel的cell。
* @author PALGERRARD
*
*/
public class ExpExcelAjax extends BaseAction { //静态的,只读取一次
private static BeanFactory bf = new ClassPathXmlApplicationContext(
"classpath*:application/*/applicationContext-*.xml"); @SuppressWarnings("unchecked")
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory(); response.setContentType("text/xml;charset=GBK");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter(); HttpSession session = request.getSession(); String xslquery = request.getParameter("xslquery");
String excelFilename = request.getParameter("excelFilename");
// 回调XML
StringBuffer xml = new StringBuffer();
xml.append("<?xml version=\"1.0\" encoding=\"GBK\"?>");
xml.append("<response>");
try { String queryhql = ""; if (xslquery != null && !xslquery.equals("")) {
queryhql = (String) session.getAttribute(xslquery);
if (queryhql == null) {
return null; // 如果没哟找到hql语句,则失败
}
} Session sessionHib = sessionFactory.openSession();
List<Object> result = (List<Object>) sessionHib.createQuery(
queryhql).list(); int posX = 0; // 定义在Excel中的单元格 列 坐标
int posY = 0; // 定义在Excel中的单元格 行 坐标
File folder = new File("d:\\Excel");
if (!folder.exists()) {
folder.mkdirs();
}
File xlsExp = new File("d:\\Excel\\"+excelFilename+".xls"); // 定义输出文件
if (!xlsExp.exists()) {
xlsExp.createNewFile();
} OutputStream os = new FileOutputStream(xlsExp);// 输出的Excel文件URL
WritableWorkbook wwb = Workbook.createWorkbook(os);// 创建可写工作薄
WritableSheet ws = wwb.createSheet("sheet1", 0);// 创建可写工作表
posY = 1;
int fposY = 0; //第一行标题列 行
int fposX = 0; //第一行标题列 列
boolean isFirst = true; // 判断是否写Excel第一行
for (Iterator iterator = result.iterator(); iterator.hasNext();) {
posX = 0; // 列,每行开始置零
Object obj = (Object) iterator.next();
Class objCls = obj.getClass();
String helperName = objCls.getName() + "Helper"; helperName = helperName.replaceAll("dao.po", "service.impl"); // 拼凑对应的Helper类名 Class helperCls = Class.forName(helperName);
helperName = objCls.getName().toLowerCase() + "Helper";
String beanName = helperName.substring(helperName
.lastIndexOf(".") + 1); Object helperObj = bf.getBean(beanName); // 得到bean
Method[] fs = helperCls.getDeclaredMethods(); for (int i = 0; i < fs.length; i++) { if (fs[i].getName().indexOf("PoToVo") != -1) {
Object excelVO = null;
try {
excelVO = fs[i].invoke(helperObj,
new Object[] { obj });
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println(excelVO.getClass().getName());
Method formatExceVOMethod = excelVO.getClass()
.getDeclaredMethod("formatExcel");
Method formatTitleMethod = excelVO.getClass()
.getDeclaredMethod("fromatTitle");
Map<String,Object> excelMap= (Map<String, Object>)formatExceVOMethod.invoke(excelVO);
List<String> title = (List<String>)formatTitleMethod.invoke(excelVO) ; //得到标题行
for (Iterator tit = title.iterator(); tit
.hasNext();) {
String firtLine = (String) tit.next();
if (isFirst) { Label temp = new Label(fposX, fposY, firtLine);// 创建写入位置和内容
ws.addCell(temp);
fposX += 1;
}
Object value = excelMap.get(firtLine);
if(null==value){
value = new String("");
}
Label temp = new Label(posX, posY,
value.toString());// 创建写入位置和内容
posX += 1;
ws.addCell(temp);
}
}
} isFirst = false; //不是第一行了
posY += 1; // 行加一 }
sessionHib.close();
wwb.write();
wwb.close();
os.close(); xml.append("<status>导入Excel成功</status>");
} catch (Exception e) {
e.printStackTrace();
xml.append("<status>导入Excel失败</status>");
} finally {
xml.append("</response>");
out.flush();
out.print(xml);
out.close();
} return null;
}}