网上看到好多人都是不知道Extjs的grid怎么分页,其中包括start 为0 的问题,有人提出过自己修改分页工具条控件,实现与后台无关的分页效果,这也是一种解决方法,但不是最标准的,下面我就说说最标准的解决方法!!
先看下面的类!
import java.lang.reflect.Field;
import java.util.Date;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.td.bean.Caigou;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
@SuppressWarnings({ "unchecked", "serial" })
public class ObjectToJson {
private static final Log log = LogFactory.getLog(Caigou.class);
public String ObjectToJson(Object bean) {
JSONObject jo= JSONObject.fromObject(bean);
//JSONArray ja = JSONArray.fromObject(bean);
return jo.toString();
}
public String ArrayToJson(Object bean) {
JSONArray ja = JSONArray.fromObject(bean);
return ja.toString();
}
private String ConvertJavaScriptType(String type) {
// System.out.print(type);
if ("String".equals(type))
return "string";
else if ("Integer".equals(type))
return "int";
else if ("Date".equals(type))
return "date";// 本来应该是date类型但是应为这个json包转换成的数据结果是这样的:{"month":3,"day":2,"year":109,"nanos":0,"time":1239694471000,"seconds":31,"timezoneOffset":-480,"date":14,"hours":15,"minutes":34}
else
return "string";
}
public String ListToJson(List list, String key,int totalNumber,int start,int limit) {
if (list!=null && list.size() > 0 )
{
Object obj = list.get(0);
return this.ListToJson(obj, list, key,totalNumber, start,limit);
} else {
return "";
}
}
/*
* 最新的方法不需要Key但是需要在每个类里面加上如下的一个字段
* public String KeyField="{每个对象对应表的主键}";
* 例如:
* public String KeyField="tableName";
* */
public String ListToJson(List list,int totalNumber, int start,int limit) {
if (list!=null && list.size() > 0 )
{
Object obj = list.get(0);
return this.ListToJson(obj, list,totalNumber, start, limit);
} else {
return "";
}
}
//
/*
* @param Object bean 实体bean List list 包含数据的list, String key 当前实体的主键,start从第几页开始,limit每页多少行
*/
public String ListToJson(Object bean, List list, String key,int totalNumber,int start,int limit)
{
StringBuilder sb = new StringBuilder();
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,
new JsDateJsonValueProcessor());
jsonConfig.registerJsonValueProcessor(java.sql.Date.class,
new JsSqlDateJsonValueProcessor());
JSONArray ja = JSONArray.fromObject(list, jsonConfig);
Class clazz = bean.getClass();
// clazz.getDeclaredFields()
Field[] fields = clazz.getDeclaredFields();
sb.append("{");
sb.append("'metaData': {");
sb.append("totalProperty: 'totalProperty',");
sb.append("root: 'root',");
sb.append(String.format("id: '%1$s',", key));
sb.append("fields: [");
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String name = field.getName();
String type = field.getType().getSimpleName();
sb.append("{");
sb.append(String.format("name: '%1$s', type: '%2$s'", name,
ConvertJavaScriptType(type)));
sb.append("},");
}
sb.replace(sb.length() - 1, sb.length(), "");
sb.append("]");
sb.append("},");
sb.append("start:");
sb.append(start);
sb.append(",");
sb.append("limit:");
sb.append(limit);
sb.append(",");
sb.append(String.format("totalProperty:%1$s,", totalNumber));// 总共多少条记录
sb.append("root:");
sb.append(ja.toString());
sb.append("}");
log.debug(sb.toString());
return sb.toString();
}
public String ListToJson(Object bean,List list,int totalNumber,int start,int limit) {
StringBuilder sb = new StringBuilder();
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,
new JsDateJsonValueProcessor());
jsonConfig.registerJsonValueProcessor(java.sql.Date.class,
new JsSqlDateJsonValueProcessor());
JSONArray ja = JSONArray.fromObject(list, jsonConfig);
Class clazz = bean.getClass();
// clazz.getDeclaredFields()
Field[] fields = clazz.getDeclaredFields();
sb.append("{");
sb.append("'metaData': {");
sb.append("totalProperty: 'totalProperty',");
sb.append("root: 'root',");
try {
//System.out.println( bean.getClass().getDeclaredField("KeyField").get(bean).toString());
sb.append(String.format("id: '%1$s',", bean.getClass().getDeclaredField("KeyField").get(bean).toString()));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
sb.append("fields: [");
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String name = field.getName();
String type = field.getType().getSimpleName();
sb.append("{");
sb.append(String.format("name: '%1$s', type: '%2$s'", name,
ConvertJavaScriptType(type)));
sb.append("},");
}
sb.replace(sb.length() - 1, sb.length(), "");
sb.append("]");
sb.append("},");
sb.append("start:");
sb.append(start);
sb.append(",");
sb.append("limit:");
sb.append(limit);
sb.append(",");
sb.append(String.format("totalProperty:%1$s,",totalNumber));// 总共多少条记录
sb.append("root:");
sb.append(ja.toString());
sb.append("}");
log.debug(sb.toString());
return sb.toString();
}
public String ListToTreeJson(List list) {
JSONArray ja = JSONArray.fromObject(list);
//System.out.println(ja.toString());
log.debug(ja.toString());
return ja.toString();
}
// public String JsonToBeanArray(String jsonString,Object obj) {
//
// JSONArray jsonArray = JSONArray.fromObject(jsonString);
// JsonConfig jsonConfig = new JsonConfig();
// jsonConfig.setArrayMode( JsonConfig.MODE_OBJECT_ARRAY );
// jsonConfig.setRootClass(obj.getClass());
// obj.getClass()[] users= JSONSerializer.toJava( jsonArray, jsonConfig );
//
//
//
// }
// public String JsonToBean(String jsonString,Object obj) {
//
// JSONObject jsonPerson = JSONObject.fromObject(jsonString);
// String[] dateFormats = new String[] {"yyyy/MM/dd"};
// JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
// Person person = (Person)JSONObject.toBean(jsonPerson, Person.class);
//
//
//
// }
//
}
我们可以看到:
sb.append("start:");
sb.append(start);
sb.append(",");
sb.append("limit:");
sb.append(limit);
这几行代码.这回你知道为什么你的grid不能分页了吗?
前台的分页工具条是根据后台传过去的数据内容分页的!