日期:2014-05-20  浏览次数:21015 次

Simpleframework组件与FreeMarker 整合例子

Simpleframework是基于后处理后处理模式技术实现的Web应用级开源框架。采用过滤器工作机制和申明式组件元数据定义,所以备整装零用的应 用模式,不仅可以支持Web应用的全程开发装,也可以在其他框架资源和应用的基础上仅引用其部分组件,本例介绍通过FreeMarker代替jsp做页面 展示,并在FreeMarker模板文件输出Simpleframework的树组件。

FreeMarker是开源的模板框架。对于它的介绍网上已经很多了。详情可参考
主页:http://www.freemarker.org/
现在我们就开始FreeMarker版的Hello World并实现输出Simpleframework树组件。
1.去这里下载 最新的FreeMarker.我下载的是Download freemarker-2.3.16
2.解压你下载的freemarker-2.3.16。
3.新建一web工程。我是Eclipse下做的。把freemarker-2.3.16/lib目录下的
jar文件复制到你建的web工程的lib目录下。
4.在WEB-INF目录下建一文件夹templates,然后在这个文件夹里面新建一个模板文件test.ftl

<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


您会看到:

?

完整的工程 点击下载

?

1 楼 kkqqcom 2010-12-15  
<div class="quote_title">allbin1983 写道</div>
<div class="quote_div">
<div class="c">
<p align="left">Simpleframework是基于后处理后处理模式技术实现的Web应用级开源框架。采用过滤器工作机制和申明式组件元数据定义,所以备整装零用的应用模式,不仅可以支持Web应用的全程开发装,也可以在其他框架资源和应用的基础上仅引用其部分组件,本例介绍通过FreeMarker代替jsp做页面展示,并在FreeMarker模板文件输出Simpleframework的树组件。</p>
<p align="left">FreeMarker是开源的模板框架。对于它的介绍网上已经很多了。详情可参考<br>主页:<a href="http://www.freemarker.org/">http://www.freemarker.org/</a><br>现在我们就开始FreeMarker版的Hello World并实现输出Simpleframework树组件。<br>1.去<a href="http://www.freemarker.org/freemarkerdownload.html">这里</a>下载 最新的FreeMarker.我下载的是Download freemarker-2.3.16<br>2.解压你下载的freemarker-2.3.16。<br>3.新建一web工程。我是Eclipse下做的。把freemarker-2.3.16/lib目录下的<br>jar文件复制到你建的web工程的lib目录下。<br>4.在WEB-INF目录下建一文件夹templates,然后在这个文件夹里面新建一个模板文件test.ftl</p>
<p align="left"><span style="text-decoration: underline;">&lt;html&gt; </span></p>
<p align="left">&lt;meta <span style="text-decoration: underline;">http </span>- <span style="text-decoration: underline;">equiv </span>="Content-Type" content="text/ <span style="text-decoration: underline;">html </span>; <span style="text-decoration: underline;">charset </span>= <span style="text-decoration: underline;">gbk </span>" /&gt;</p>
<p align="left">&lt;head&gt;</p>
<p align="left">? &lt;title&gt;你的自定义模板&lt;/title&gt;</p>
<p align="left">&lt;/head&gt;</p>
<p align="left">?&lt;body&gt;</p>
<p align="left">????? &lt;h1&gt; <span style="text-decoration: underline;">freemarker </span>输出的内容&lt;h1&gt;?</p>
<p align="left">????? ${message}</p>
<p align="left">????? :&lt;font color=red&gt;${ <span style="text-decoration: underline;">username </span>}&lt;/font&gt;</p>
<p align="left">?????? &lt;h1&gt; sSimple 输出的内容&lt;h1&gt;&lt;br&gt;?</p>
<p align="left">?? &lt;table&gt;</p>
<p align="left">??? &lt;tr&gt;</p>
<p align="left">?????? &lt;td width="50%" <span style="text-decoration: underline;">valign </span>="top"&gt;</p>
<p align="left">?????? <span style="text-decoration: underline;">&lt;div&gt; </span>可以拖动的普通树 <span style="text-decoration: underline;">&lt;/div&gt; </span></p>
<p align="left">?????? &lt;div id="demoTree1" style="padding: 8px; border: 5px solid # <span style="text-decoration: underline;">ddd </span>;"&gt; <span style="text-decoration: underline;">&lt;/div&gt; </span></p>
<p align="left">?????? &lt;/td&gt;</p>
<p align="left">?????? &lt;td width="50%" <span style="text-decoration: underline;">valign </span>="top"&gt;</p>
<p align="left">?????? <span style="text-decoration: underline;">&lt;div&gt; </span>动态装载的树,可以多选 <span style="text-decoration: underline;">&lt;/div&gt; </span></p>
<p align="left">?????? &lt;div id="demoTree2" style="padding: 8px; border: 5px solid # <span style="text-decoration: underline;">ddd </span>;"&gt; <span style="text-decoration: underline;">&lt;/div&gt; </span></p>
<p align="left">?????? &lt;/td&gt;</p>
<p align="left">??? &lt;/tr&gt;</p>
<p align="left">? &lt;/table&gt;???</p>
<p align="left">?&lt;/body&gt;</p>
<p align="left"><span style="text-decoration: underline;">&lt;/html&gt; </span></p>
<p align="left">5.建一个HelloFreeMarkerServlet:</p>
<p align="left"><strong>package</strong>demo;</p>
<p align="left"><strong>import</strong>java.io.IOException;</p>
<p align="left"><strong>import</strong>java.io.PrintWriter;</p>
<p align="left"><strong>import</strong>java.util.HashMap;</p>
<p align="left"><strong>import</strong>java.util.Map;</p>
<p align="left"><strong>import</strong>javax.servlet.ServletException;</p>
<p align="left"><strong>import</strong>javax.servlet.http.HttpServlet;</p>
<p align="left"><strong>import</strong>javax.servlet.http.HttpServletRequest;</p>
<p align="left"><strong>import</strong>javax.servlet.http.HttpServletResponse;</p>
<p align="left">?</p>
<p align="left"><strong>import</strong>freemarker.template.Configuration;</p>
<p align="left"><strong>import</strong>freemarker.template.Template;</p>
<p align="left"><strong>import</strong>freemarker.template.TemplateException;</p>
<p align="left">?</p>
<p align="left">@SuppressWarnings("serial")</p>
<p align="left"><strong>public</strong><strong>class</strong>HelloFreeMarkerServlet <strong>extends</strong>HttpServlet</p>
<p align="left">{</p>
<p align="left">??? <strong>private</strong>Configuration cfg= <strong>null</strong>;</p>
<p align="left">?</p>
<p align="left">??? @Override</p>
<p align="left">??? <strong>public</strong><strong>void</strong>init() <strong>throws</strong>ServletException</p>
<p align="left">??? {</p>
<p align="left">??????? // FreeMarker程序入口点</p>
<p align="left">??????? cfg= <strong>new</strong>Configuration();</p>
<p align="left">??????? // 初始化 <span style="text-decoration: underline;">Servlet </span>上下文(第二参数为ServletContext的相对路径,null代表当前网站根路径,相对路径)</p>
<p align="left">??????? cfg.setServletContextForTemplateLoading(<strong>this</strong>.getServletContext(), <strong>null</strong>);??????</p>
<p align="left">??? }</p>
<p align="left">??? @SuppressWarnings("unchecked")</p>
<p align="left">??? @Override</p>
<p align="left">??? <strong>protected</strong><strong>void</strong>doPost(HttpServletRequest req, HttpServletResponse resp)</p>
<p align="left">??????????? <strong>throws</strong>ServletException, IOException</p>
<p align="left">??? {</p>
<p align="left">??????? // 模板文件会根据key,读取value</p>
<p align="left">??????? <span style="text-decoration: underline;">Map </span>root = <strong>new</strong> <span style="text-decoration: underline;">HashMap </span>();</p>
<p align="left">??????? root.put("message", "hello!");</p>
<p align="left">??????? root.put("username", "SSimpleframe and freemarker lover.");</p>
<p align="left">?? ?????Template t = cfg.getTemplate("/templates/test.ftl");</p>
<p align="left">??????? resp.setCharacterEncoding("utf-8");</p>
<p align="left">??????? PrintWriter out = resp.getWriter();</p>
<p align="left">??????? <strong>try</strong></p>
<p align="left">??????? {</p>
<p align="left">??????????? t.process(root, out);</p>
<p align="left">??????? } <strong>catch</strong>(TemplateException e)</p>
<p align="left">??????? {</p>
<p align="left">??????????? e.printStackTrace();</p>
<p align="left">??????? }</p>
<p align="left">??? }</p>
<p align="left">?</p>
<p align="left">??? @Override</p>
<p align="left">??? <strong>protected</strong><strong>void</strong>doGet(HttpServletRequest req, HttpServletResponse resp)</p>
<p align="left">??????????? <strong>throws</strong>ServletException, IOException</p>
<p align="left">??? {</p>
<p align="left">??????? <strong>this</strong>.doPost(req, resp);</p>
<p align="left">??? }</p>
<p align="left">?</p>
<p align="left">}</p>
<p align="left">?</p>
<p align="left">6.web.xml中的相应配置:</p>
<p align="left">?</p>
<p align="left">&lt;?xmlversion=<em>"1.0"</em> encoding=<em>"UTF-8"</em>?&gt;</p>
<p align="left">&lt;web-appxmlns:xsi=<em><span>"<a class="smarterwiki-linkify" href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"</span></em> xmlns=<em><span>"<a class="smarterwiki-linkify" href="http://java.sun.com/xml/ns/javaee">http://java.sun.com/xml/ns/javaee</a>"</span></em></p>
<p align="left">??? xmlns:web=<em><span>"<a class="smarterwiki-linkify" href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd</a>"</span></em></p>
<p align="left">??? xsi:schemaLocation=<em><span>"<a class="smarterwiki-linkify" href="http://java.sun.com/xml/ns/javaee">http://java.sun.com/xml/ns/javaee</a> <a class="smarterwiki-linkify" href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd</a>"</span></em></p>
<p align="left">??? id=<em>"WebApp_ID"</em> version=<em>"2.5"</em>&gt;</p>
<p align="left">??? &lt;display-name&gt; <span style="text-decoration: underline;">Simpleframework </span>&lt;/display-name&gt;</p>
<p align="left">??? &lt;welcome-file-list&gt;</p>
<p align="left">?????? &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;</p>
<p align="left">?????? &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;</p>
<p align="left">?????? &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;</p>
<p align="left">?????? &lt;welcome-file&gt;default.html&lt;/welcome-file&gt;</p>
<p align="left">?????? &lt;welcome-file&gt;default.htm&lt;/welcome-file&gt;</p>
<p align="left">?????? &lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;</p>
<p align="left">??? &lt;/welcome-file-list&gt;</p>
<p align="left">?</p>
<p align="left">??? &lt;servlet&gt;</p>
<p align="left">??????? &lt;servlet-name&gt;testServlet&lt;/servlet-name&gt;</p>
<p align="left">??????? &lt;servlet-class&gt;demo.HelloFreeMarkerServlet&lt;/servlet-class&gt;</p>
<p align="left">??? &lt;/servlet&gt;</p>
<p align="left">?</p>
<p align="left">??? &lt;servlet-mapping&gt;</p>
<p align="left">??????? &lt;servlet-name&gt;testServlet&lt;/servlet-name&gt;</p>
<p align="left">??????? &lt;url-pattern&gt;/hello.do&lt;/url-pattern&gt;</p>
<p align="left">??? &lt;/servlet-mapping&gt;</p>
<p align="left">?</p>
<p align="left">??? &lt;filter&gt;</p>
<p align="left">?????? &lt;filter-name&gt;actionFilter&lt;/filter-name&gt;</p>
<p align="left">??? ??? &lt;filter-class&gt;net.Simpleframework.web.page.PageFilter&lt;/filter-class&gt;</p>
<p align="left">??? &lt;/filter&gt;</p>
<p align="left">??? &lt;filter-mapping&gt;</p>
<p align="left">?????? &lt;filter-name&gt;actionFilter&lt;/filter-name&gt;</p>
<p align="left">?????? &lt;url-pattern&gt;*. <span style="text-decoration: underline;">jsp </span>&lt;/url-pattern&gt;</p>
<p align="left">??? &lt;/filter-mapping&gt;??</p>
<p align="left">??? &lt;filter-mapping&gt;</p>
<p align="left">?????? &lt;filter-name&gt;actionFilter&lt;/filter-name&gt;</p>
<p align="left">?????? &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;</p>
<p align="left">??? &lt;/filter-mapping&gt;</p>
<p align="left">??? &lt;listener&gt;</p>
<p align="left">??? &lt;listener-class&gt;net.Simpleframework.web.page.PageEventAdapter&lt;/listener-class&gt;</p>
<p align="left">??? &lt;/listener&gt;</p>
<p align="left">&lt;/web-app&gt;</p>
<p align="left">?</p>
<p align="left">7. 申明组件元数据定义,需要对应于拦截的hello, hello.xml 文件如下:</p>
<p align="left">?</p>
<p align="left">&lt;?xmlversion=<em>"1.0"</em> encoding=<em>"UTF-8"</em>?&gt;</p>
<p align="left">&lt;pagexmlns:xsi=<em><span>"<a class="smarterwiki-linkify" href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"</span></em></p>
<p align="left">? xsi:noNamespaceSchemaLocation=<em>"/xsd/default/sSimple.xsd"</em>&gt;</p>
<p align="left">??? &lt;responseCharacterEncoding&gt; <span style="text-decoration: underline;">gbk </span>&lt;/responseCharacterEncoding&gt;</p>
<p align="left">? &lt;components&gt;</p>
<p style="margin-left: 55pt;" align="left">??? &lt;treename=<em>"demoTree1"</em> containerId=<em>"demoTree1"</em> handleClass=<em>"net.Simpleframework.example.MyTree"</em></p>
<p align="left">????? width=<em>"240"</em>&gt;</p>
<p align="left">????? &lt;treenodetext=<em>"Root"</em> acceptdrop=<em>"true"</em>&gt;</p>
<p align="left">??????? &lt;treenodetext=<em>"Node1"</em> draggable=<em>"true"</em> acceptdrop=<em>"true"</em>&gt;</p>
<p align="left">????????? &lt;jsDblclickCallback&gt;alert('Node1');&lt;/jsDblclickCallback&gt;</p>
<p align="left">??????? &lt;/treenode&gt;</p>
<p align="left">??????? &lt;treenodetext=<em>"Node2"</em> draggable=<em>"true"</em> acceptdrop=<em>"true"</em>&gt;</p>
<p align="left">????????? &lt;treenodetext=<em>"Node2_1"</em> draggable=<em>"true"</em> acceptdrop=<em>"true"</em>&gt;</p>
<p align="left">??????????? &lt;jsDblclickCallback&gt;alert('Node2_1');&lt;/jsDblclickCallback&gt;</p>
<p align="left">????????? &lt;/treenode&gt;</p>
<p align="left">????????? &lt;treenodetext=<em>"Node2_2"</em> draggable=<em>"true"</em> acceptdrop=<em>"true"</em>&gt;</p>
<p align="left">????????? &lt;/treenode&gt;</p>
<p align="left">????????? &lt;treenodetext=<em>"Node2_3"</em> draggable=<em>"true"</em> acceptdrop=<em>"true"</em>&gt;</p>
<p align="left">????????? &lt;/treenode&gt;</p>
<p align="left">??????? &lt;/treenode&gt;</p>
<p align="left">??????? &lt;treenodetext=<em>"Node3"</em> draggable=<em>"true"</em> acceptdrop=<em>"true"</em>&gt;</p>
<p align="left">??????? &lt;/treenode&gt;</p>
<p align="left">??????? &lt;treenodetext=<em>"Node4"</em> draggable=<em>"true"</em> acceptdrop=<em>"true"</em>&gt;</p>
<p align="left">??????? &lt;/treenode&gt;</p>
<p align="left">????? &lt;/treenode&gt;</p>
<p align="left">??? &lt;/tree&gt;</p>
<p align="left">?</p>
<p align="left">??? &lt;treename=<em>"demoTree2"</em> containerId=<em>"demoTree2"</em> checkboxes=<em>"true"</em></p>
<p align="left">????? checkboxesThreeState=<em>"true"</em> dynamicLoading=<em>"true"</em> width=<em>"240"</em>&gt;</p>
<p align="left">????? &lt;treenodetext=<em>"</em><em>北京市</em><em>"</em>/&gt;</p>
<p align="left">????? &lt;treenodetext=<em>"</em><em>上海市</em><em>"</em>/&gt;</p>
<p align="left">?????? ***</p>
<p align="left">??? &lt;/tree&gt;</p>
<p align="left">? &lt;/components&gt;</p>
<p align="left">&lt;/page&gt;</p>
<p align="left">?</p>
<p align="left">8.启动浏览器访问: <span style="text-decoration: underline;"><span><a class="smarterwiki-linkify" href="http://localhost:8080/demo/hello.do">http://localhost:8080/demo/hello.do</a> </span></span></p>
<p align="left"><br>您会看到:</p>
<p><img style="padding: 1px; border: 1px solid #999999;" src="http://simpleframework.net/%24resource/default/filePager/jsp/dl.jsp?__file_beanId=1483841273_1967688702&amp;__file_Id=2653&amp;job=sys_account_normal" alt=""></p>
<p>?</p>
<p>完整的工程 <span style="color: #ff0000;"><span style="font-size: 28px;"><a href="http://simpleframework.googlecode.com/files/Simple-FreeMarker.zip">点击下载</a></span></span></p>
</div>
<p>?</p>
</div>
<p><br><a href="http://www.iteye.com/topic/842350">http://www.iteye.com/topic/842350</a></p>
<p><a href="http://www.iteye.com/topic/842348">http://www.iteye.com/topic/842348</a></p>
<p>?lz重复发帖了。</p>
2 楼 allbin1983 2010-12-15  
这是为了发到论坛上,操作失误。