﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-bruceleey's columns  -随笔分类-Web </title><link>http://www.blogjava.net/invoked/category/41843.html</link><description>It's better to burn out, than fade away.</description><language>zh-cn</language><lastBuildDate>Thu, 22 Oct 2009 17:59:50 GMT</lastBuildDate><pubDate>Thu, 22 Oct 2009 17:59:50 GMT</pubDate><ttl>60</ttl><item><title>Hibernate复合主键(composite-id)查询</title><link>http://www.blogjava.net/invoked/archive/2009/10/22/299373.html</link><dc:creator>张晓枫</dc:creator><author>张晓枫</author><pubDate>Thu, 22 Oct 2009 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/invoked/archive/2009/10/22/299373.html</guid><wfw:comment>http://www.blogjava.net/invoked/comments/299373.html</wfw:comment><comments>http://www.blogjava.net/invoked/archive/2009/10/22/299373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/invoked/comments/commentRss/299373.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/invoked/services/trackbacks/299373.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;"><span style="font-size: 14pt;"><span style="font-size: 12pt;"><span style="font-family: 微软雅黑;"><span style="font-size: 12pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;">&nbsp; Hibernate逆向生成无主键的数据表时产生的hbm如：<br />
&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">class&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="class_name"</span><span style="color: #ff0000;">&nbsp;table</span><span style="color: #0000ff;">="table_name"</span><span style="color: #ff0000;">&nbsp;schema</span><span style="color: #0000ff;">="schema_name"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">composite-id&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="id"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="class_name"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">key-property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="property_name"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="type_name"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">column&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="column_name"</span><span style="color: #ff0000;">&nbsp;length</span><span style="color: #0000ff;">="20"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">key-property</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">composite-id</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">class</span><span style="color: #0000ff;">&gt;</span></div>
&nbsp; Hibernate不允许无PrimaryKey的ORM，因此会独立生成此对象为ORM的PrimaryKey<br />
<br />
&nbsp; 当需要查询此表，如果此对象中有任意一个字段为NULL，则整条记录都为NULL<br />
<br />
&nbsp; 因为Hibenrate约束主键不能为空。<br />
<br />
&nbsp; 解决办法：可将composite-id标签里可能会为空的字段提取到composite-id外，<br />
&nbsp; 将数据表所对应的POJO添加字段，字段为提取到composite-id标签外的字段属性<br />
<br />
&nbsp; HQL查询时直接用对应的类索引属性查询，无需经过第三方生成类。<br />
<br />
<br />
&nbsp; <br />
</span></span></span></span></span></span></span>
<img src ="http://www.blogjava.net/invoked/aggbug/299373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/invoked/" target="_blank">张晓枫</a> 2009-10-22 15:36 <a href="http://www.blogjava.net/invoked/archive/2009/10/22/299373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>S2SH整合构建Ext动态树(带右键菜单操作)</title><link>http://www.blogjava.net/invoked/archive/2009/09/26/296551.html</link><dc:creator>张晓枫</dc:creator><author>张晓枫</author><pubDate>Sat, 26 Sep 2009 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/invoked/archive/2009/09/26/296551.html</guid><wfw:comment>http://www.blogjava.net/invoked/comments/296551.html</wfw:comment><comments>http://www.blogjava.net/invoked/archive/2009/09/26/296551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/invoked/comments/commentRss/296551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/invoked/services/trackbacks/296551.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 什么是ExtJS?&nbsp;要了解什么是ExtJS，得先了解一下什么是YUI。&nbsp;&nbsp;YUI（Yahoo!&nbsp;UI&nbsp;Library&nbsp;）是一个开源的JavaScript库，与Ajax、DHTML和DOM等技术一起使用可以用于创建富有交互性的Web应用，它还包含丰富的CSS资源。&nbsp;&nbsp;Ext最初是YUI的一个扩展，然而，它...&nbsp;&nbsp;<a href='http://www.blogjava.net/invoked/archive/2009/09/26/296551.html'>阅读全文</a><img src ="http://www.blogjava.net/invoked/aggbug/296551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/invoked/" target="_blank">张晓枫</a> 2009-09-26 15:23 <a href="http://www.blogjava.net/invoked/archive/2009/09/26/296551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>S2SH整合下的动态树(非Ajax)</title><link>http://www.blogjava.net/invoked/archive/2009/09/26/296548.html</link><dc:creator>张晓枫</dc:creator><author>张晓枫</author><pubDate>Sat, 26 Sep 2009 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/invoked/archive/2009/09/26/296548.html</guid><wfw:comment>http://www.blogjava.net/invoked/comments/296548.html</wfw:comment><comments>http://www.blogjava.net/invoked/archive/2009/09/26/296548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/invoked/comments/commentRss/296548.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/invoked/services/trackbacks/296548.html</trackback:ping><description><![CDATA[Dtree是个非常简单易用的JS类库，封装了JS对树型结构的一些复杂操作，其简单易用的API能使新手顺利的完成动态树，下载地址为：<a target="_blank" href="http://destroydrop.com/javascripts/tree/">http://destroydrop.com/javascripts/tree/</a><br />
&nbsp; 本文结合Struts2.X，Spring2.0，Hibernate3.0整合使用，数据库为简单起见使用MySQL，表结构的设计是根据Dtree的结构来的，Dtree基本数据字段如下:<br />
<table>
    <tbody>
        <tr>
            <td>id</td>
            <td>Number</td>
            <td>Unique identity number.</td>
        </tr>
        <tr>
            <td>pid</td>
            <td>Number</td>
            <td>Number refering to the parent node. The value for the root node has to be -1.</td>
        </tr>
        <tr>
            <td>name</td>
            <td>String</td>
            <td>Text label for the node.</td>
        </tr>
        <tr>
            <td>url</td>
            <td>String</td>
            <td>Url for the node.</td>
        </tr>
        <tr>
            <td>title</td>
            <td>String</td>
            <td>Title for the node.</td>
        </tr>
        <tr>
            <td>target</td>
            <td>String</td>
            <td>Target for the node.</td>
        </tr>
        <tr>
            <td>icon</td>
            <td>String</td>
            <td>Image file to use as the icon. Uses default if not specified.</td>
        </tr>
        <tr>
            <td>iconOpen</td>
            <td>String</td>
            <td>Image file to use as the open icon. Uses default if not specified.</td>
        </tr>
        <tr>
            <td>open</td>
            <td>Boolean</td>
            <td>Is the node open.</td>
        </tr>
    </tbody>
</table>
<br />
SQL脚本如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">create</span>&nbsp;<span style="color: #0000ff;">database</span><span style="color: #000000;">&nbsp;exercise;<br />
</span><span style="color: #0000ff;">use</span>&nbsp;<span style="color: #0000ff;">database</span><span style="color: #000000;">&nbsp;exercise;<br />
</span><span style="color: #0000ff;">create</span>&nbsp;<span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;dtreedemo01(<br />
&nbsp;&nbsp;&nbsp;id&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">primary</span>&nbsp;<span style="color: #0000ff;">key</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;pid&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">),<br />
&nbsp;&nbsp;&nbsp;name&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">),<br />
&nbsp;&nbsp;&nbsp;url&nbsp;&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">),<br />
&nbsp;&nbsp;&nbsp;title&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">),<br />
&nbsp;&nbsp;&nbsp;target&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">),<br />
&nbsp;&nbsp;&nbsp;icon&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">),<br />
&nbsp;&nbsp;&nbsp;iconopen&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">),<br />
&nbsp;&nbsp;&nbsp;opened&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">)<br />
);<br />
<br />
<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">-1</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">Root</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">javascript:&nbsp;void(0);</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">00</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">音乐</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">javascript:&nbsp;void(0);</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0001</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">00</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">轻金属</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0002</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">00</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">重金属</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0003</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">00</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">R&amp;B</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">01</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">体育</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">javascript:&nbsp;void(0);</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0101</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">01</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">篮球</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0102</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">01</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">足球</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0103</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">01</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">体操</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">02</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">美食</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">javascript:&nbsp;void(0);</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0201</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">02</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">中国菜</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">020101</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0201</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">青椒找肉</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0202</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">02</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">日本菜</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">020201</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0202</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">河夫烤鱼</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0203</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">02</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">法国菜</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">insert</span>&nbsp;<span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;dtreedemo01&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">020301</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">0203</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">爆炒蜗牛</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">);<br />
</span></div>
<br />
接下来就是三个框架的整合了，因为此文只是介绍一下Dtree的使用，所以整合的细节就不说了，直接看展示页面的代码.<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="background-color: #ffff00; color: #000000;">&lt;%</span><span style="background-color: #f5f5f5; color: #000000;">@&nbsp;page&nbsp;language</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">java</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;import</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">java.util.*</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;pageEncoding</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">gbk</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #ffff00; color: #000000;">%&gt;</span><span style="color: #000000;"><br />
</span><span style="background-color: #ffff00; color: #000000;">&lt;%</span><span style="background-color: #f5f5f5; color: #000000;">@taglib&nbsp;prefix</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">s</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;uri</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">/struts-tags</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #ffff00; color: #000000;">%&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">DynaTreeDemo</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">link&nbsp;</span><span style="color: #ff0000;">rel</span><span style="color: #0000ff;">="StyleSheet"</span><span style="color: #ff0000;">&nbsp;href</span><span style="color: #0000ff;">="css/dtree.css"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="text/css"</span>&nbsp;<span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #ff0000;">&nbsp;src</span><span style="color: #0000ff;">="js/dtree.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">table&nbsp;</span><span style="color: #ff0000;">width</span><span style="color: #0000ff;">="180"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td&nbsp;</span><span style="color: #ff0000;">height</span><span style="color: #0000ff;">="300"</span><span style="color: #ff0000;">&nbsp;valign</span><span style="color: #0000ff;">="top"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">=</span>&nbsp;<span style="background-color: #f5f5f5; color: #0000ff;">new</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;dTree('tree');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.config.folderLinks</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #0000ff;">false</span><span style="background-color: #f5f5f5; color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.config.useCookies</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #0000ff;">false</span><span style="background-color: #f5f5f5; color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">&lt;</span><span style="background-color: #f5f5f5; color: #000000;">s:iterator&nbsp;value</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">#request.treeList</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.add(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&lt;s:property&nbsp;&nbsp;value=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">id</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">/&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&lt;s:property&nbsp;&nbsp;value=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">pid</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;/&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&lt;s:property&nbsp;&nbsp;value=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">name</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;/&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&lt;s:property&nbsp;&nbsp;value=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">url</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;/&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&lt;s:property&nbsp;&nbsp;value=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">title</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;/&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&lt;s:property&nbsp;&nbsp;value=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">targer</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;/&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&lt;s:property&nbsp;&nbsp;value=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">icon</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;/&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">&lt;/</span><span style="background-color: #f5f5f5; color: #000000;">s:iterator</span><span style="background-color: #f5f5f5; color: #000000;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(tree);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">table</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
上文中的treeList为在后端控制器获取到的数据，在JSP页面中使用Struts2标签迭代集合实现javascript与S2的交互。<br />
这种实现方法的一个缺点是，当有大量的数据时也是一次性查询出来传递到Dtree封装好的递归方法中，影响效率.<br />
去除了S2SH的Jar，下载地址：<a href="http://files.cnblogs.com/Mars/dtreedemo.rar">http://www.blogjava.net/Files/Mars/dtreedemo.rar</a>
<img src ="http://www.blogjava.net/invoked/aggbug/296548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/invoked/" target="_blank">张晓枫</a> 2009-09-26 15:17 <a href="http://www.blogjava.net/invoked/archive/2009/09/26/296548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>textarea不换行</title><link>http://www.blogjava.net/invoked/archive/2009/09/26/296534.html</link><dc:creator>张晓枫</dc:creator><author>张晓枫</author><pubDate>Sat, 26 Sep 2009 06:52:00 GMT</pubDate><guid>http://www.blogjava.net/invoked/archive/2009/09/26/296534.html</guid><wfw:comment>http://www.blogjava.net/invoked/comments/296534.html</wfw:comment><comments>http://www.blogjava.net/invoked/archive/2009/09/26/296534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/invoked/comments/commentRss/296534.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/invoked/services/trackbacks/296534.html</trackback:ping><description><![CDATA[textarea显示文本时，如果将标签换行，显示内容会变乱，将标签写成一行显示内容为正常。<img src="http://www.cnblogs.com/Emoticons/qface/055611455.gif" alt="" />
<img src ="http://www.blogjava.net/invoked/aggbug/296534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/invoked/" target="_blank">张晓枫</a> 2009-09-26 14:52 <a href="http://www.blogjava.net/invoked/archive/2009/09/26/296534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP防止重复提交 防止重复刷新 防止后退问题以及处理方式</title><link>http://www.blogjava.net/invoked/archive/2009/09/26/296496.html</link><dc:creator>张晓枫</dc:creator><author>张晓枫</author><pubDate>Sat, 26 Sep 2009 04:24:00 GMT</pubDate><guid>http://www.blogjava.net/invoked/archive/2009/09/26/296496.html</guid><wfw:comment>http://www.blogjava.net/invoked/comments/296496.html</wfw:comment><comments>http://www.blogjava.net/invoked/archive/2009/09/26/296496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/invoked/comments/commentRss/296496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/invoked/services/trackbacks/296496.html</trackback:ping><description><![CDATA[<div>
<p>一。前言<br />
你在任何一个比较专业的BBS都会看到这样的问题，即使你Google一下，也会发现有很多的人在关注和询问，但大家给出的解决方法却都是千差万别，（有
的人主张采用脚本来解决;有的则想重定向到别的页面;有的则将此问题提升到Token的角度）为什么会有如此大的差异呢？</p>
<p>二。问题场景<br />
首先，我们应该先了解为什么要处理这样的问题？或者专业一点就是它适合的场景是什么？（似乎只有人来问没有人来解释）</p>
<p>1。重复提交、重复刷新的场景<br />
重复提交、重复刷新都是来解决系统重复记录的问题。也就是说某个人在多次的提交某条记录（为什么？也许是闲了没有事情干的;最有可能是用户根本就不知道自己的提交结果是否已经执行了？！）。</p>
<p>但出现了这样的问题并不见得就必须处理，要看你所开发的系统的类别而定。比如你接手的是某个资源管理系统，系统本身从需求的角度根本就不允许出现"
重复"的记录，在这样需求的约束条件下，去执行重复的提交动作只会引发&#8220;业务级异常&#8221;的产生，根本就不可能执行成功也就无所谓避免不避免的问题了。</p>
<p>2。防止后退的场景<br />
了解了重复刷新、重复提交的场景，我们来了解一下"防止后退"操作的原因是什么？比如你在开发某个投票系统，它有很多的步骤，并且这些步骤之间是有联系
的，比如第一步会将某些信息发送给第二步，第二步缓存了这些信息，同时将自身的信息发送给了第三步。。。。。等等，如果此时用户处在第三步骤下，我们想象
一下某个淘气用户的用户点击了后退按钮，此时屏幕出现了第二步骤的页面，他再次的修改或者再次的提交，进入到下一个步骤（也就是第三步骤），错误就会在此
产生？！什么错误呢？最为典型的就是这样的操作直接导致了对于第一个步骤信息的丢失！（如果这样的信息是依靠Request存放的话，当然你可以存放在
Session或者更大的上下文环境中，但这不是个好主意！关于信息存放的问题，下次在就这个问题详细的讨论）</p>
<p><br />
三。如何处理的问题<br />
当然很多的系统（比如订票系统从需求上本身是允许个人重复订票的）是必须要避免重复刷新、重复提交、以及防止后退的问题的，但即使是这样的问题，也要区分
如何处理以及在哪里处理的（网上只是告诉你如何处理，但很少去区分在哪里处理的），显然处理的方式无非是客户端或者服务器端两种，而面对不同的位置处理的
方式也是不同的，但有一点要事先声明：任何客户端（尤其是B/S端）的处理都是不可信任的，最好的也是最应该的是服务器端的处理方法。</p>
<p>客户端处理：<br />
面对客户端我们可以使用Javascript脚本来解决，如下</p>
<p>1。重复刷新、重复提交<br />
Ways One：设置一个变量，只允许提交一次。<br />
&lt;script language="javascript"&gt; <br />
&nbsp;&nbsp;&nbsp;  var checkSubmitFlg = false; <br />
&nbsp;&nbsp;&nbsp;  function checkSubmit() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (checkSubmitFlg == true) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return false; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  checkSubmitFlg = true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return true; <br />
&nbsp;&nbsp;  } <br />
&nbsp;&nbsp;  document.ondblclick = function docondblclick() { <br />
&nbsp;&nbsp;&nbsp;  window.event.returnValue = false; <br />
&nbsp;&nbsp;  } <br />
&nbsp;&nbsp;  document.onclick = function doconclick() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (checkSubmitFlg) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  window.event.returnValue = false; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br />
&nbsp;&nbsp;  } <br />
&lt;/script&gt; <br />
&lt;html:form action="myAction.do" method="post" onsubmit="return checkSubmit();"&gt;</p>
<p>Way Two : 将提交按钮或者image置为disable<br />
&lt;html:form action="myAction.do" method="post"  <br />
&nbsp;&nbsp;&nbsp;  onsubmit="getElById('submitInput').disabled = true; return true;"&gt;&nbsp;&nbsp;  <br />
&lt;html:image styleId="submitInput" src="images/ok_b.gif" border="0" /&gt; <br />
&lt;/html:form&gt; </p>
<p>2。防止用户后退<br />
这里的方法是千姿百态，有的是更改浏览器的历史纪录的，比如使用window.history.forward()方法;有的是&#8220;用新页面的URL替换当
前的历史纪录，这样浏览历史记录中就只有一个页面，后退按钮永远不会变为可用。&#8221;比如使用
javascript:location.replace(this.href); event.returnValue=false;</p>
<p><br />
2.服务器端的处理（这里只说Struts框架的处理）<br />
利用同步令牌（Token）机制来解决Web应用中重复提交的问题，Struts也给出了一个参考实现。</p>
<p>基本原理：<br />
服务器端在处理到达的请求之前，会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较，<br />
看是否匹配。在处理完该请求后，且在答复发送给客户端之前，将会产生一个新的令牌，该令牌除传给<br />
客户端以外，也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次<br />
提交的话，客户端传过来的令牌就和服务器端的令牌不一致，从而有效地防止了重复提交的发生。</p>
<p>if (isTokenValid(request, true)) { <br />
&nbsp;&nbsp;&nbsp;  // your code here <br />
&nbsp;&nbsp;&nbsp;  return mapping.findForward("success"); <br />
} else { <br />
&nbsp;&nbsp;&nbsp;  saveToken(request); <br />
&nbsp;&nbsp;&nbsp;  return mapping.findForward("submitagain"); <br />
}</p>
<p>Struts根据用户会话ID和当前系统时间来生成一个唯一（对于每个会话）令牌的，具体实现可以参考<br />
TokenProcessor类中的generateToken()方法。</p>
<p>1. //验证事务控制令牌,&lt;html:form &gt;会自动根据session中标识生成一个隐含input代表令牌，防止两次提交<br />
2. 在action中：</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //&lt;input type="hidden" name="org.apache.struts.taglib.html.TOKEN"  <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //  value="6aa35341f25184fd996c4c918255c3ae"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (!isTokenValid(request)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  errors.add(ActionErrors.GLOBAL_ERROR, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  new ActionError("error.transaction.token")); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  resetToken(request); //删除session中的令牌</p>
<p>3. action有这样的一个方法生成令牌<br />
&nbsp;&nbsp;  protected String generateToken(HttpServletRequest request) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  HttpSession session = request.getSession(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte id[] = session.getId().getBytes(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte now[] = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  new Long(System.currentTimeMillis()).toString().getBytes(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MessageDigest md = MessageDigest.getInstance("MD5"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  md.update(id); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  md.update(now); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return (toHex(md.digest())); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch (IllegalStateException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return (null); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch (NoSuchAlgorithmException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return (null); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br />
&nbsp;&nbsp;  } </p>
<p>总结<br />
对于重复提交、重复刷新、防止后退等等都是属于系统为避免重复记录而需要解决的问题，在客户端去处理需要针对每一种的可能提出相应的解决方案，然而在服务器端看来只不过是对于数据真实性的检验问题，基于令牌的处理就是一劳永逸的方法。</p>
<p>同时我们也看到，从不同的角度去看待问题，其解决的方法也是不同的。客户端更追求的是用户的操作，而服务端则将注意力放在了数据的处理上，所以在某
个对于服务器端看似容易的问题上，用客户端来解决却麻烦了很多！反之依然。所以在某些问题的处理上我们需要综合考虑和平衡，是用客户端来解决？还是用服务
器端来处理？</p>
</div>
<img src ="http://www.blogjava.net/invoked/aggbug/296496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/invoked/" target="_blank">张晓枫</a> 2009-09-26 12:24 <a href="http://www.blogjava.net/invoked/archive/2009/09/26/296496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>