- 浏览: 87861 次
- 性别:
- 来自: 孝感
文章分类
最新评论
package org.fanzone.util;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
/**
* Title: Touch<br>
* Description: Base Handler Utilities<br>
* Copyright: Copyright (c) 2011 <br>
* Create DateTime: Jun 2, 2011 2:40:20 PM <br>
* @author wangmeng
*/
public class SenchaUtil {
/**
* Appending object via string.
* @param object
* @return java.lang.String
*/
public static String objectToJson(Object object) {
StringBuilder json = new StringBuilder();
if (object == null) {
json.append("\"\"");
}else if (object instanceof String ) {
json.append("\"").append((String)object).append("\"");
}else if (object instanceof Long){
json.append("\"").append((Long)object).append("\"");
}else if (object instanceof Integer){
json.append("\"").append((Integer)object).append("\"");
}else if (object instanceof Double){
json.append("\"").append((Double)object).append("\"");
}else if (object instanceof Float){
json.append("\"").append((Float)object).append("\"");
}else if (object instanceof Short){
json.append("\"").append((Short)object).append("\"");
}else if (object instanceof Character){
json.append("\"").append((Character)object).append("\"");
}else if (object instanceof Character){
json.append("\"").append((Character)object).append("\"");
}else {
json.append(beanToJson(object));
}
return json.toString();
}
/**
* Formating attributes.
* @param bean
* @return String
*/
public static String beanToJson(Object bean) {
StringBuilder json = new StringBuilder();
json.append("{");
PropertyDescriptor[] props = null;
try {
props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();
} catch (IntrospectionException e) {
}
if (props != null) {
for (int i = 0; i < props.length; i++) {
try {
String name = objectToJson(props[i].getName());
String value = objectToJson(props[i].getReadMethod().invoke(bean));
json.append(name);
json.append(":");
json.append(value);
json.append(",");
} catch (Exception e) {
}
}
json.setCharAt(json.length() - 1, '}');
} else {
json.append("}");
}
return json.toString();
}
/**
* Make List to JSON formated.
* @param list, class
* @return java.lang.String
*/
public static String listToJson(List<?> list, Class<?> c) {
StringBuilder json = new StringBuilder();
json.append("{"+'"'+c.getSimpleName()+'"'+":[");
if((list != null) && (list.size() > 0)) {
for(Object obj : list){
json.append(objectToJson(obj));
json.append(",");
}
json.setCharAt(json.length()-1, ']');
}else {
json.append("]");
}
json.append("}");
return json.toString();
}
/**
* Make Set to JSON formated.
* @param list
* @return java.lang.String
*/
public static String setToJson(Set<?> set, Class<?> c){
StringBuilder json = new StringBuilder();
Iterator<?> itr = set.iterator();
if(itr.hasNext()){
json.append("{"+'"'+c.getSimpleName()+'"'+":[");
}
if(set != null && set.size() > 0){
for(Object obj : set){
json.append(objectToJson(obj));
json.append(",");
}
json.setCharAt(json.length()-1, ']');
}else{
json.append("]");
}
json.append("}");
return json.toString();
}
/**
* To build model in dynamic.
* @param className
* @return model string
*/
public static StringBuilder buildModel(String className){
StringBuilder builder = new StringBuilder();
Class<?> c;
PropertyDescriptor[] props = null;
try {
c = Class.forName(className);
builder.append("Ext.regModel('"+c.getSimpleName()+"', {");
builder.append("fields: [");
props = Introspector.getBeanInfo(c, Object.class).getPropertyDescriptors();
if (props != null) {
for (int i = 0; i < props.length; i++) {
String name = props[i].getName();
String type = props[i].getReadMethod().toString();
type = type.substring(type.indexOf(" ")+1, type.lastIndexOf(" "));
type = type.substring(type.lastIndexOf(".")+1,type.length());
builder.append("{name: '"+name+"', type: '"+type.toLowerCase()+"'},");
}
builder.replace(builder.length()-1, builder.length(), "");
}
builder.append("]");
builder.append("});");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (IntrospectionException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
return builder;
}
/**
* To fetch all the entities under the specified package.
* @param pack
* @return entity list
*/
public static List<String> entities(String pack){
List<String> entities = new ArrayList<String>();
String classes = System.getProperty("java.class.path");
String dir = classes.substring(0,classes.indexOf(";"));
String path = dir + '\\' + pack.replace('.', '\\');
File file = new File(path);
if(file.exists()){
if(file.isDirectory()){
File[] files = file.listFiles();
for(File f : files){
entities.add(pack+'.'+f.getName().substring(0,f.getName().indexOf(".")));
}
}
}
return entities;
}
/**
* Build models with the specified package.
* @param pack
* @return all models string.
*/
public static StringBuilder buildModels(String pack){
StringBuilder builder = new StringBuilder();
for(String entity : entities(pack)){
builder.append(buildModel(entity));
builder.append("\r\n");
}
return builder;
}
/**
* Test Main
* @param args
*/
public static void main(String[] args) {
System.out.println(buildModels("org.mars.entity"));
}
}
发表评论
-
关于java.lang.LinkageError
2013-06-05 12:19 904启动tomcat(6.0.28)访问项目主页出现异常: j ... -
【转载】"No appenders could be found for logger"的错误
2012-07-30 13:43 1194可能存在的情况: (1)在tomcat\common\ ... -
The APR based Apache Tomcat Native library which allows optimal performance...
2012-05-31 23:23 1357The APR based Apache Tomcat ... -
十进制转二进制小示例(含位运算操作及规律)
2012-04-11 15:11 1592package org.noneorone.lang.n ... -
sencha列表数据刷新和显示更多的插件模拟(iPhone & Android)
2012-03-15 17:50 2984/*************************** ... -
Java文件复制(本地与网络资源)
2011-11-17 09:24 1514趁休息的时间,写了个文件复制的小程序,以避免了从网上下载的繁琐 ... -
Java复制本地和远程资源
2011-07-14 15:12 2077java 文件复制 (^_^) package ... -
HashMap用法小谈
2011-07-13 14:36 1537HashTable是基于哈希表的 Map 接口的实现。此实 ... -
利用反射改变私有属性的值
2011-07-12 14:41 1024package org.fanzone.lang.ref ... -
算法种种
2011-07-08 16:15 718大家有没有收集什么比较巧妙的、优秀的算法?拿出来大家一起分享一 ... -
枚举示例
2011-07-08 14:59 982package org.fanzone.level; ... -
简单的线程处理
2011-07-08 14:37 831package org.fanzone.thread; ... -
抓取表单请求数据
2011-07-08 09:17 1535基于网络流的方式读取特定URL资源。 通过网络流连接( ... -
自定义动态生成Model以及数据格式处理代码精细
2011-07-05 09:57 1218package org.fanzone.util; ... -
Sencha Touch静态面板切换
2011-07-05 09:49 2609/** * 名人关注模型 */ Ext.reg ... -
关于SenchaTouch生成动态TabPanel的一些代码摘要
2011-07-05 09:44 2312tab_auto.js Ext.ns("mars.v ... -
Sencha Touch 探究资料
2011-07-05 09:41 1524关于Sencha Touch探究的资料除了官网上面的简单例子h ... -
类构造器
2011-07-05 09:39 815今天突然有个想法:能不能根据包路径获取该包下面所有类?在网 ... -
List、Set、Arrays、数组等应用的样例编写
2011-07-05 09:35 1161根据一个面试题目编写:请实现一个函数:最长顺子;输入很 ... -
JAVA_HOME环境配置
2011-07-04 12:01 6783java环境变量配置 windows xp下配置JDK ...
相关推荐
2. **数据管理**:内置数据包管理器,支持本地存储和远程数据同步,可以轻松处理JSON或XML格式的数据。 3. **触摸事件**:针对触摸设备优化的事件系统,确保用户交互的流畅性。 4. **布局系统**:强大的布局引擎可以...
将Sencha Touch项目导入myEclipse,可以利用其丰富的代码提示、调试工具以及项目管理功能,提升开发效率。 在"压缩包子文件的文件名称列表"中,我们只有一个文件名为 "demo4"。通常,这可能是一个包含了整个示例...
5. 数据处理功能:Sencha Touch 提供了丰富的数据处理功能,开发人员能够方便地处理各种格式的数据如 XML、JSON,并能灵活地绑定到可视化组件加以展示。 Sencha Touch 的界面组件 1. 表单组件:Sencha Touch 为...
- 数据模型支持多种数据格式,如JSON、XML等,并且可以方便地从服务器获取或保存数据。 #### 4. **触摸事件处理** - 针对移动设备进行了优化,支持多点触控操作,如滑动、缩放等。 - 内置的手势识别器可以轻松地...
总之,Sencha Touch 2中的`List`组件是一个强大且灵活的工具,它可以帮助开发者创建美观且响应式的移动应用。理解并掌握`List`的使用,对于构建高效、互动的移动界面至关重要。通过实践和学习,你可以充分利用其特性...
SDK 包含了 Sencha Touch 2 的所有核心库、工具和文档,是开发 Sencha Touch 应用的基础。在提供的 `sdk` 文件夹中,包含了框架的核心 JavaScript 文件、CSS 样式表以及图片资源等。开发者通常会引用 `sdk` 中的 `...
- **服务器代理**:实现与后端服务器的通信,包括RESTful API的调用、数据格式化处理等。 - **客户端代理**:利用本地存储技术(如LocalStorage)保存数据,确保在无网络连接情况下应用仍能正常运行。 6. **视图...
在阅读了《Hands-on Sencha Touch中文翻译第六章.pdf》文档的内容之后,可以提炼出以下知识点,主要涉及Sencha Touch框架以及使用Sencha Cmd命令行工具进行Sencha Touch应用的创建和管理。 ### Sencha Cmd命令行...
- **IIS配置:** 如果使用的是Windows IIS作为Web服务器,则需要添加`application/x-json` MIME类型,以确保Sencha Touch能够正常运行。 **1.3 安装步骤** - **解压SDK:** 将下载好的SDK压缩包解压至项目目录中,...
它的核心特性在于提供了一套丰富的组件、数据管理工具以及强大的触摸事件处理,使得开发者可以创建具有原生感的多平台移动应用。"sencha learn Touch Theming"主题学习资源可能是针对Sencha Touch的应用主题设计与...
7. **API调用与数据同步**:学习如何使用Sencha Touch 2的Ajax组件与服务器进行通信,例如发送HTTP请求获取JSON数据,或者使用RESTful API进行数据同步。 8. **性能优化**:源代码可能会涉及到一些性能优化技巧,...
Sencha Touch还提供了一系列高级功能,如触摸手势支持、离线存储、自定义主题等。随着您对框架的深入学习,您将能够构建更加复杂和功能丰富的移动Web应用。 #### 总结 通过本文的学习,您已经掌握了如何使用Sencha...
在实际开发中,你可能需要使用源码控制工具(如Git)来管理代码,并定期通过`sencha app upgrade`命令更新Sencha Touch框架。此外,Sencha的组件化特性使得你可以创建自定义组件,实现特定功能。对于复杂的项目,...
Sencha 提供的主要工具有两个:Sencha Touch 用于移动应用开发,而 Sencha Ext JS 专注于桌面端应用。由于没有具体提及是哪一个,我们将涵盖两者的基础知识。 **Sencha Touch 知识点:** 1. **Sencha Touch 概述**...
1. Sencha Cmd 3.1或更高版本:这是一个命令行工具,用于打包和部署EXTJS和Sencha Touch应用程序。版本3.1及以上包含了内置的SASS和COMPASS,无需额外安装。 2. Ruby:Sencha Cmd依赖于Ruby运行,因此需要在计算机上...
1. **安装依赖**:首先,你需要安装Node.js和Sencha Cmd工具,它们是构建和管理Sencha Touch项目所必需的。 2. **克隆项目**:使用Git将`OASP-Sencha-client-master`仓库克隆到本地。 3. **构建项目**:运行Sencha ...
Reader则是Store用来解析从服务器返回的数据格式(如JSON、XML等)的工具。 13. **Proxy和Writer** 在数据管理中,Proxy用于抽象数据加载和保存的机制,使得应用程序不必关心底层数据是如何与服务器交互的。Writer...
8. **Ajax和JSON数据处理**:EXT内置了与服务器进行异步通信的能力,支持JSON数据格式,方便前后端数据交换。 9. **主题定制**:EXT允许自定义主题,开发者可以根据需求调整UI风格,满足品牌一致性。 在这个“ext...