Extjs自动加载model层

程序启动的时候,自动加载model层,可以减少model层代码的书写,大大提高效率,首先,在后台代码书写model层拼成代码

public void model() throws IOException {
        String str = "";
        String tr = "";
        List<Class> cls = SessionFactory.getClassse();
        for (Class tp : cls) {
            str += "Ext.define('AM.model.";
            str += tp.getName().split("\\.")[2]
                    + "',{\n extend:'Ext.data.Model',fields:[";
            tr = "";
            Field[] fields = tp.getDeclaredFields();
            for (Field f : fields) {
                if (tr.length() > 1)
                    tr += ",";
                tr += "'" + f.getName() + "'";
            }
            str += tr;
            str += "]});\n";
        }
        HttpServletResponse response = org.apache.struts2.ServletActionContext
                .getResponse();
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(str);
    }

此方法是在struts的action当中的

SessionFactory代码如下


package sy.util;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

/**
 * Configures and provides access to Hibernate sessions, tied to the current
 * thread of execution. Follows the Thread Local Session pattern, see
 * {@link http://hibernate.org/42.html }.
 */
@SuppressWarnings("deprecation")
public class SessionFactory {

	/**
	 * Location of hibernate.cfg.xml file. Location should be on the classpath
	 * as Hibernate uses #resourceAsStream style lookup for its configuration
	 * file. The default classpath location of the hibernate config file is in
	 * the default package. Use #setConfigFile() to update the location of the
	 * configuration file for the current session.
	 */
	private static String CONFIG_FILE_LOCATION = "hibernate.cfg.xml";
	private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
	private static Configuration configuration = new AnnotationConfiguration();
	// new AnnotationConfiguration();//

	private static org.hibernate.SessionFactory sessionFactory;
	private static String configFile = CONFIG_FILE_LOCATION;

	private static List<Class> clses;
	static {
		try {

			initClasses();
			// configuration.configure(CONFIG_FILE_LOCATION);
			sessionFactory = configuration.buildSessionFactory();

			// ServiceRegistry serviceRegistry = new
			// ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
			// sessionFactory =
			// configuration.buildSessionFactory(serviceRegistry);//.buildSessionFactory(serviceRegistry);//
		} catch (Exception e) {
			System.err.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
	}

	public static List<Class> getClassse() {
		return clses;
	}

	/**
	 * Returns the ThreadLocal Session instance. Lazy initialize the
	 * <code>SessionFactory</code> if needed.
	 * 
	 * @return Session
	 * @throws HibernateException
	 */
	public static Session getSession() throws HibernateException {
		Session session = (Session) threadLocal.get();

		if (session == null || !session.isOpen()) {
			if (sessionFactory == null) {
				rebuildSessionFactory();
			}
			session = (sessionFactory != null) ? sessionFactory.openSession()
					: null;
			threadLocal.set(session);
		}

		return session;
	}

	/**
	 * Rebuild hibernate session factory
	 * 
	 */
	public static void rebuildSessionFactory() {
		try {
			initClasses();
			// configuration.configure(CONFIG_FILE_LOCATION);
			sessionFactory = configuration.buildSessionFactory();

			// ServiceRegistry serviceRegistry = new
			// ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
			// sessionFactory =
			// configuration.buildSessionFactory(serviceRegistry);
		} catch (Exception e) {
			System.err.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
	}

	/**
	 * Close the single hibernate session instance.
	 * 
	 * @throws HibernateException
	 */
	public static void closeSession() throws HibernateException {
		Session session = (Session) threadLocal.get();
		threadLocal.set(null);

		if (session != null) {
			session.close();
		}
	}

	/**
	 * return session factory
	 * 
	 */
	public static org.hibernate.SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	/**
	 * return session factory
	 * 
	 * session factory will be rebuilded in the next call
	 */
	public static void setConfigFile(String configFile) {
		SessionFactory.configFile = configFile;
		sessionFactory = null;
	}

	/**
	 * return hibernate configuration
	 * 
	 */
	public static Configuration getConfiguration() {
		return configuration;
	}

	public static void initClasses() {
		configuration.configure(configFile);
		String packageName = "sy.entity";
		String packageDirName = packageName.replace('.', '/');
		Enumeration<URL> dirs;
		clses = new ArrayList<Class>();
		try {
			dirs = Thread.currentThread().getContextClassLoader()
					.getResources(packageDirName);
			if (dirs.hasMoreElements()) {
				URL url = dirs.nextElement();
				String protocol = url.getProtocol();
				if ("file".equals(protocol)) {
					String filePath = URLDecoder.decode(url.getFile(), "UTF-8");
					File dir = new File(filePath);
					String[] ls = dir.list();
					for (int i = 0; i < ls.length; i++) {
						String[] st = ls[i].split("\\.");
						try {

							// configuration.a
							// configuration.addClass(Class.forName(packageName+"."+st[0]));
							Class tps = Class
									.forName(packageName + "." + st[0]);

							clses.add(tps);
							configuration.addAnnotatedClass(tps);

						} catch (ClassNotFoundException e) {
							// TODO Auto-generated catch block
							System.out.println("------------------");
							e.printStackTrace();
						}
						// lis.add(st[0]);
					}
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

最后,在index.html添加代码

 <script type="text/javascript" src="data!model.do"></script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值