日期:2014-05-16  浏览次数:20360 次

自定义Struts的JSP模板和Hibernate的DAO模板
??? ???? 这一阵子在MyEclipse里做项目,用到了Struts和hibernate功能,起初,对自动生成赞不绝口,但后来,发现自动生成的代码也有不方便的地方,比如:

一、Struts

??? ?? ?? 当new一个JSP,使用Standard JSP using Struts 1.2时,生成的页面代码中只包含了Struts标签。但很多时候,我们需要在页面中使用到JSTL标签,我们应该把常用的几个JSTL标签加到JSP页 面中,就像这样:

  1. <%@?taglib?uri="http://struts.apache.org/tags-bean"?prefix="bean"%>??
  2. <%@?taglib?uri="http://struts.apache.org/tags-html"?prefix="html"%>??
  3. <%@?taglib?uri="http://struts.apache.org/tags-logic"?prefix="logic"%>??
  4. <%@?taglib?uri="http://struts.apache.org/tags-tiles"?prefix="tiles"%>??
  5. <%@?taglib?uri="http://java.sun.com/jsp/jstl/core"?prefix="c"%>??
  6. <%@?taglib?uri="http://java.sun.com/jsp/jstl/functions"?prefix="fn"%>??
  7. <%@?taglib?uri="http://java.sun.com/jsp/jstl/fmt"?prefix="fmt"%>??
??? ??
??? ?? ?? 其次,Struts1.2的
  1. <html:base?/>??
<html:base> <html:base> 似乎有些问题,它表示的地址是当前页面的地址,而不是应用程序的根目录,因此,这个base我们还是得用内嵌的Java代码得到,就像这样:

</html:base> </html:base>
  1. <%??
  2. String?path?=?request.getContextPath();??
  3. String?basePath?=?request.getScheme()+"://"+request.getServerName()+":"
  4. ?????????? +request.getServerPort()+path+"/";??
  5. %>??

??? ?? ?? 然后在之间加入base标签:

  1. "<%=basePath%>">??

??? ?? ?? 这样,用起来才比较方便一点。但每次都改页面,显然做了很多重复的劳动,我想MyEclipse在生成这样的页面时,肯定用到了模板。那么到底是那个模板呢?我们来搜搜看。

??? ?? ?? 首先说明一下,我用的不是MyEclipse的All-In-One安装,所以有两个目录,一个是Eclipse的解压目录,另一个才是 MyEclipse的安装目录:MyEclipse 5.5.1 GA。如果用的All-In-One安装,可能只有一个目录,就是MyEclipse 5.5.1 GA。这里,我就把这个目录称为安装目录了。

??? ?? ?? 在安装目录下搜索:Struts-1_2.vtl,可以得到这个文件,打开看看,其头部结构与生成的页面很相似,因此,我们只需要在适当的地方添上自己的代码即可。修改前还是要注意备份。

二、hibernate

??? ?? ?? 使用Hibernate Reverse Engineering最大的好处就是它可以自动生成PO和DAO的源码,以及映射配置文件。但是看看DAO的代码,才发现里面的数据库操作方法都是实例 方法,用起来还必须先new一个DAO,个人觉得没有这个必要,使用静态方法就可以了,但我不可能给每个DAO的每个方法都加一个static吧。于是, 跟上面一样,改模板。

??? ?? ?? 首先得分析一下,生成的DAO是继承的BaseHibernateDAO,而BaseHibernateDAO是扩展的 IBaseHibernateDAO接口,在这个接口中,定义了getSession方法。要把数据库操作方法改成static,这个 getSession方法也必须是static,但是在接口中不能定义是static的方法,那么唯一的办法就是不管IBaseHibernateDAO 接口,在BaseHibernateDAO类中自己实现一个静态的getSession方法。

??? ?? ?? BaseHibernateDAO有模板文件,但是没有必要改它,因为一个工程只用得到一个BaseHibernateDAO。我们要改的模板文件是用于 生成具体DAO类的。然而在安装目录下用hibernate关键字搜一搜,并没有发现哪个文件与我们的DAO有关,难道MyEc