精华帖 (4) :: 良好帖 (1) :: 新手帖 (1) :: 隐藏帖 (12)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-14
Simpleframework是基于后处理后处理模式技术实现的Web应用级开源框架。采用过滤器工作机制和申明式组件元数据定义,所以备整装零用的应 用模式,不仅可以支持Web应用的全程开发装,也可以在其他框架资源和应用的基础上仅引用其部分组件,本例介绍通过FreeMarker代替jsp做页面 展示,并在FreeMarker模板文件输出Simpleframework的树组件。
FreeMarker是开源的模板框架。对于它的介绍网上已经很多了。详情可参考 <html> <meta http - equiv ="Content-Type" content="text/ html ; charset = gbk " /> <head> <title>你的自定义模板</title> </head> <body> <h1> freemarker 输出的内容<h1> ${message} :<font color=red>${ username }</font> <h1> sSimple 输出的内容<h1><br> <table> <tr> <td width="50%" valign ="top"> <div> 可以拖动的普通树 </div> <div id="demoTree1" style="padding: 8px; border: 5px solid # ddd ;"> </div> </td> <td width="50%" valign ="top"> <div> 动态装载的树,可以多选 </div> <div id="demoTree2" style="padding: 8px; border: 5px solid # ddd ;"> </div> </td> </tr> </table> </body> </html> 5.建一个HelloFreeMarkerServlet: packagedemo; importjava.io.IOException; importjava.io.PrintWriter; importjava.util.HashMap; importjava.util.Map; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse;
importfreemarker.template.Configuration; importfreemarker.template.Template; importfreemarker.template.TemplateException;
@SuppressWarnings("serial") publicclassHelloFreeMarkerServlet extendsHttpServlet { privateConfiguration cfg= null;
@Override publicvoidinit() throwsServletException { // FreeMarker程序入口点 cfg= newConfiguration(); // 初始化 Servlet 上下文(第二参数为ServletContext的相对路径,null代表当前网站根路径,相对路径) cfg.setServletContextForTemplateLoading(this.getServletContext(), null); } @SuppressWarnings("unchecked") @Override protectedvoiddoPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException { // 模板文件会根据key,读取value Map root = new HashMap (); root.put("message", "hello!"); root.put("username", "SSimpleframe and freemarker lover."); Template t = cfg.getTemplate("/templates/test.ftl"); resp.setCharacterEncoding("utf-8"); PrintWriter out = resp.getWriter(); try { t.process(root, out); } catch(TemplateException e) { e.printStackTrace(); } }
@Override protectedvoiddoGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException { this.doPost(req, resp); }
}
6.web.xml中的相应配置:
<?xmlversion="1.0" encoding="UTF-8"?> <web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name> Simpleframework </display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list>
<servlet> <servlet-name>testServlet</servlet-name> <servlet-class>demo.HelloFreeMarkerServlet</servlet-class> </servlet>
<servlet-mapping> <servlet-name>testServlet</servlet-name> <url-pattern>/hello.do</url-pattern> </servlet-mapping>
<filter> <filter-name>actionFilter</filter-name> <filter-class>net.Simpleframework.web.page.PageFilter</filter-class> </filter> <filter-mapping> <filter-name>actionFilter</filter-name> <url-pattern>*. jsp </url-pattern> </filter-mapping> <filter-mapping> <filter-name>actionFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <listener> <listener-class>net.Simpleframework.web.page.PageEventAdapter</listener-class> </listener> </web-app>
7. 申明组件元数据定义,需要对应于拦截的hello, hello.xml 文件如下:
<?xmlversion="1.0" encoding="UTF-8"?> <pagexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="/xsd/default/sSimple.xsd"> <responseCharacterEncoding> gbk </responseCharacterEncoding> <components> <treename="demoTree1" containerId="demoTree1" handleClass="net.Simpleframework.example.MyTree" width="240"> <treenodetext="Root" acceptdrop="true"> <treenodetext="Node1" draggable="true" acceptdrop="true"> <jsDblclickCallback>alert('Node1');</jsDblclickCallback> </treenode> <treenodetext="Node2" draggable="true" acceptdrop="true"> <treenodetext="Node2_1" draggable="true" acceptdrop="true"> <jsDblclickCallback>alert('Node2_1');</jsDblclickCallback> </treenode> <treenodetext="Node2_2" draggable="true" acceptdrop="true"> </treenode> <treenodetext="Node2_3" draggable="true" acceptdrop="true"> </treenode> </treenode> <treenodetext="Node3" draggable="true" acceptdrop="true"> </treenode> <treenodetext="Node4" draggable="true" acceptdrop="true"> </treenode> </treenode> </tree>
<treename="demoTree2" containerId="demoTree2" checkboxes="true" checkboxesThreeState="true" dynamicLoading="true" width="240"> <treenodetext="北京市"/> <treenodetext="上海市"/> *** </tree> </components> </page>
8.启动浏览器访问: http://localhost:8080/demo/hello.do
完整的工程 点击下载
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-15
刚好需要学习FreeMarker,写的不错。
|
|
返回顶楼 | |
浏览 3746 次