本人写的demo比较简单,只是最简单的分页查询,以后会继续增加更改功能。并且通过IE7与Firefox测试。还是请大家查看具体代码比较好。对于使用Ext所需要的准备工作在此不再叙述。google或baidu上搜一下就会比较多,本人推荐(http://www.dojochina.com/index.php?q=node/547)。
1、前台JS文件
// JavaScript Document function sexRender(value){ if (value == '1') { return "<span style='color:red;font-weight:bold;'>男</span>"; } else if(value=='2'){ return "<span style='color:green;font-weight:bold;'>女</span>"; }else{ return "<span style='color:red;font-weight:bold;'>未定义</span>"; } } Ext.onReady(function(){ // create the Data Store var store = new Ext.data.JsonStore({ root: 'rows', totalProperty: 'results', idProperty: 'id', //remoteSort: true, fields: ['id','stuId','name','sex','phone'], // load using script tags for cross domain, if the data in on the same domain as // this page, an HttpProxy would be better proxy: new Ext.data.HttpProxy({ url: "../studentwebdemo/admin/student/Com_getStudent.action" }) }); store.setDefaultSort('id', 'asc'); var pagingBar = new Ext.PagingToolbar({ pageSize: 25, store: store, displayInfo: true, displayMsg: '显示学生信息 {0} - {1} 条,共有{2}条记录', emptyMsg: "没有学生信息" }); var grid = new Ext.grid.GridPanel({ store: store, columns:[{id:"id",header: "序号", width: 160, sortable: true, dataIndex: "id"}, {header: "学号", width: 75, sortable: true, dataIndex: "stuId"}, {header: "姓名", width: 75, sortable: true, dataIndex: "name"}, {header: "性别", width: 75, sortable: true,renderer:sexRender,dataIndex:"sex"}, {header: "电话", width: 85, sortable: true, dataIndex: "phone"}], stripeRows: true, autoExpandColumn: "id", height:350, width:600, title:"学生信息", bbar:pagingBar }); grid.render('studentDiv');//studentDiv为显示页面的指定div store.load({params:{start:0, limit:25}});//start与limit会在通过后台HttpServletRequest获取 })
2、后台代码
1)Struts Action
package com.javaeye.sunjiesh.studentwebdemo.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import org.apache.struts2.ServletActionContext;
import com.javaeye.sunjiesh.studentwebdemo.entity.Student;
import com.javaeye.sunjiesh.studentwebdemo.service.StudentManager;
import com.opensymphony.xwork2.ActionSupport;
public class StudentAction extends ActionSupport {
private static final long serialVersionUID = -4529678295440228555L;
private StudentManager studentManager;
public StudentManager getStudentManager() {
return studentManager;
}
public void setStudentManager(StudentManager studentManager) {
this.studentManager = studentManager;
}
/**
* Ext后台分页得到学生信息
*
* @return
*/
public String getStudent() {
HttpServletRequest request = ServletActionContext.getRequest();
//int page=Integer.parseInt(request.getParameter("pages"));
//Enumeration params=request.getParameterNames();
int start = Integer.parseInt(request.getParameter("start"));
int limit = Integer.parseInt(request.getParameter("limit"));
List<Student> studentList = studentManager.getStudents(start, limit);
int studentsCount=studentManager.getAllStudentsCount();
// if(studentsCount!=0){
// System.out.println("一共有"+studentsCount+"名学生");
// }
JSONArray jsonArray = JSONArray.fromObject(studentList);
// outputResult(jsonArray.toString());
// System.out.println("jsonArray.toString() is "+jsonArray.toString());
String allStudentsWithJson = "{\"results\":" + studentsCount
+ ",\"rows\":";
allStudentsWithJson += jsonArray.toString();
allStudentsWithJson += "}";
outputResult(allStudentsWithJson);
System.out.println("allStudentsWithJson is " + allStudentsWithJson);
return this.NONE;
}
public void outputResult(String result) {
HttpServletResponse response = ServletActionContext.getResponse();
try {
System.out.println(result);
response.setHeader("ContentType", "text/json");
response.setCharacterEncoding("gbk");
PrintWriter pw = response.getWriter();
pw.write(result);
pw.flush();
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2)Service层
package com.javaeye.sunjiesh.studentwebdemo.service;
import java.util.List;
import com.javaeye.sunjiesh.studentwebdemo.dao.StudentDAO;
import com.javaeye.sunjiesh.studentwebdemo.entity.Student;
public class StudentManager {
private StudentDAO studentDAO;
public StudentDAO getStudentDAO() {
return studentDAO;
}
public void setStudentDAO(StudentDAO studentDAO) {
this.studentDAO = studentDAO;
}
public List<Student> getAllStudents(){
return studentDAO.getAll();
}
public List<Student> getStudents(int firstResult,int maxResult){
return studentDAO.getStudents(firstResult, maxResult);
}
public int getAllStudentsCount(){
return studentDAO.getAllStudentsCount();
}
}
3)持久层(Hibernate)
package com.javaeye.sunjiesh.studentwebdemo.dao;
import java.util.List;
import org.hibernate.Query;
import com.javaeye.sunjiesh.studentwebdemo.entity.Student;
import com.opencs.common.BaseHibernateDao;
public class StudentDAO extends BaseHibernateDao<Student>{
@SuppressWarnings("unchecked")
public List<Student> getStudents(int firstResult,int maxResult){
String hql="from Student as student";
Query query=getSession().createQuery(hql);
query.setFirstResult(firstResult);
query.setMaxResults(maxResult);
List<Student> students=(List<Student>)query.list();
return students;
}
public int getAllStudentsCount(){
String hql="select count(*) from Student as student";
Query query=getSession().createQuery(hql);
Object countObj=query.uniqueResult();
Integer count=0;
if(countObj!=null){
count=Integer.parseInt(String.valueOf(countObj));
}
return count.intValue();
}
}
3、相关配置文件
1)struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <include file="com/javaeye/sunjiesh/studentwebdemo/struts2/struts-admin.xml" /> </struts>
2)struts.properties
struts.action.extension=do,action struts.objectFactory=spring struts.enable.DynamicMethodInvocation=false struts.devMode=true struts.locale=zh_CN struts.i18n.encoding=GBK struts.ui.theme=simple #struts.custom.i18n.resources=i18n struts.ui.templateDir=/WEB-INF/template #struts.multipart.saveDir=temp/ struts.multipart.maxSize=8388608 struts.enable.SlashesInActionNames=true #struts.objectFactory=com.opensymphony.xwork2.ObjectFactory
3)struts-admin.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="student.manager" namespace="/admin/student" extends="struts-default"> <action name="Com_*" method="{1}" class="com.javaeye.sunjiesh.studentwebdemo.web.StudentAction"> <result name="list">/admin/user/list.html </result> <result name="add">/admin/user/add.html</result> <result name="edit">/admin/user/edit.html </result> <result name="editPassword">/admin/user/edit_password.html </result> </action> </package> </struts>
4)spring-base.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <!-- 属性文件读入 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:/jdbc.properties</value> </list> </property> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mappingDirectoryLocations"> <list> <value>classpath:/com/javaeye/sunjiesh/studentwebdemo/spring/hbm/</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.connection.release_mode"> auto </prop> <prop key="hibernate.show_sql">true</prop> <prop key="connection.useUnicode">true</prop> <prop key="connection.characterEncoding">gbk</prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!--scope需要注明,否则会报错 --> <bean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" scope="prototype" abstract="true" > <property name="transactionManager" ref="transactionManager" /> <property name="proxyTargetClass" value="true" /> <property name="transactionAttributes"> <props> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> </beans>
5)spring-dao.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans default-autowire="byName" default-lazy-init="true"> <bean id="studentDAO" parent="baseTxService" autowire="byName" lazy-init="true"> <property name="target"> <bean class="com.javaeye.sunjiesh.studentwebdemo.dao.StudentDAO"/> </property> </bean> </beans>
6)spring-beans.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="studentManager" class="com.javaeye.sunjiesh.studentwebdemo.service.StudentManager"> <property name="studentDAO" ref="studentDAO"></property> </bean> </beans>