<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>crabdave</title>
    <description></description>
    <link>http://crabdave.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Open Flash Chart组件的使用</title>
        <author>crabdave</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://crabdave.javaeye.com">crabdave</a>&nbsp;
          链接：<a href="http://crabdave.javaeye.com/blog/189653" style="color:red;">http://crabdave.javaeye.com/blog/189653</a>&nbsp;
          发表时间: 2008年05月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" align="center" style="margin: 0cm 0cm 0pt; text-align: center;"><strong style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 24pt;"><span style="font-family: Times New Roman;">Open Flash Chart</span></span></strong><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 24pt; font-family: 宋体;">组件的使用</span></strong></p>
<h1 style="margin: 17pt 0cm 16.5pt;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"><span style="font-size: x-large;">简介</span></span></h1>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 26.25pt; mso-char-indent-count: 2.5;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">OpenFlashChart</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">是一个开源的报表制作组件，该组件能够自动生成一个好看的、动态的</span><span lang="EN-US"><span style="font-family: Times New Roman;">flash</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">报表；该组件使用</span><span lang="EN-US"><span style="font-family: Times New Roman;">flash</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">展示报表能够很好的做到与浏览器进行集成，目前浏览器基本都能很好的支持</span><span lang="EN-US"><span style="font-family: Times New Roman;">flash</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">；该组件还支持一些简单的</span><span lang="EN-US"><span style="font-family: Times New Roman;">JavaScript</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">，提供在图形上对外部</span><span lang="EN-US"><span style="font-family: Times New Roman;">URL</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的链接；该组件非常小，</span><span lang="EN-US"><span style="font-family: Times New Roman;">java</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">类一共不超过</span><span lang="EN-US"><span style="font-family: Times New Roman;">10</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">个，可操作的</span><span lang="EN-US"><span style="font-family: Times New Roman;">API</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">也很少，这样学习起来也非常容易上手。但可阅读的文档非常少，在与其它框架集成方面还有些问题。</span></span></p>
<h1 style="margin: 17pt 0cm 16.5pt;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"><span style="font-size: x-large;">主要配置项：</span></span></h1>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt;"><span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings;"><span style="mso-list: Ignore;"><span style="font-size: small;">&Oslash;</span><span style="font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size: small;"><span style="font-family: Times New Roman;"><strong style="mso-bidi-font-weight: normal;"><span lang="EN-US">openflashchart.jar:</span></strong><span lang="EN-US">Open Flash Chart</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">组件，工程开始时引入</span><span lang="EN-US"><span style="font-family: Times New Roman;">(lib</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">目录下</span><span lang="EN-US"><span style="font-family: Times New Roman;">)</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">。</span><strong style="mso-bidi-font-weight: normal;"></strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt;"><span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings;"><span style="mso-list: Ignore;"><span style="font-size: small;">&Oslash;</span><span style="font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size: small;"><span style="font-family: Times New Roman;"><strong style="mso-bidi-font-weight: normal;"><span lang="EN-US">open-flash-chart.swf:</span></strong><span lang="EN-US">Flash</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">文件接口，通过该文件来生成</span><span lang="EN-US"><span style="font-family: Times New Roman;">Flash</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">文件，备页面调用</span><span lang="EN-US"><span style="font-family: Times New Roman;">(</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">在</span><span lang="EN-US"><span style="font-family: Times New Roman;">web</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">目录下，与</span><span lang="EN-US"><span style="font-family: Times New Roman;">WEB-INF</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">目录并级</span><span lang="EN-US"><span style="font-family: Times New Roman;">)</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">。</span><strong style="mso-bidi-font-weight: normal;"></strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt;"><span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings;"><span style="mso-list: Ignore;"><span style="font-size: small;">&Oslash;</span><span style="font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size: small;"><span style="font-family: Times New Roman;"><strong style="mso-bidi-font-weight: normal;"><span lang="EN-US">swfobject.js:</span></strong><span lang="EN-US">Flash</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">文件依赖的</span><span lang="EN-US"><span style="font-family: Times New Roman;">JS</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">文件</span><span lang="EN-US"><span style="font-family: Times New Roman;">(</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">在</span><span lang="EN-US"><span style="font-family: Times New Roman;">web</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">目录下，与</span><span lang="EN-US"><span style="font-family: Times New Roman;">WEB-INF</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">目录并级</span><span lang="EN-US"><span style="font-family: Times New Roman;">)</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">。</span><strong style="mso-bidi-font-weight: normal;"></strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span lang="EN-US"><span style="font-size: small; font-family: Times New Roman;">&nbsp;</span></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.1pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><strong style="mso-bidi-font-weight: normal;"><span lang="EN-US"><span style="font-family: Times New Roman;">Open Flash Chart</span></span></strong><strong style="mso-bidi-font-weight: normal;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">主要有：</span><span lang="EN-US"><span style="font-family: Times New Roman;">HTML</span></span></strong><strong style="mso-bidi-font-weight: normal;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">、</span><span lang="EN-US"><span style="font-family: Times New Roman;">JSP</span></span></strong><strong style="mso-bidi-font-weight: normal;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">、</span><span lang="EN-US"><span style="font-family: Times New Roman;">Servlet</span></span></strong><strong style="mso-bidi-font-weight: normal;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">等三种使用方式。其具体介绍参见附件中(在这里发表文章好像还有篇幅的限制...)。在附件中还提供了Demo和ofc的文档，供大家下载研究。</span></strong></span></p>
<h1 style="margin: 17pt 0cm 16.5pt;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"><span style="font-size: x-large;">备注和补充说明：</span></span></h1>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">1</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">、该组件支持</span><span lang="EN-US"><span style="font-family: Times New Roman;">java 1.5</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">以上版本。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">2</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">、利用</span><span lang="EN-US"><span style="font-family: Times New Roman;">Servlet API</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">输出数据时应该注意设置编码，防止出现乱码。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">如：</span><span lang="EN-US"><span style="font-family: Times New Roman;">response.setCharacterEncoding("utf-8");//</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">设置字符集，在项目中使用</span><span lang="EN-US"><span style="font-family: Times New Roman;">utf-8</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">页面不会出现乱码。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">3</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">、在页面</span><span lang="EN-US"><span style="font-family: Times New Roman;">Object</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">标签中如果要开启外链支持，需要设置</span><span lang="EN-US"><span style="font-family: Times New Roman;">allowScriptAccess=always(</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">默认为</span><span lang="EN-US"><span style="font-family: Times New Roman;">sameDomain</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">，即不允许跨域访问</span><span lang="EN-US"><span style="font-family: Times New Roman;">)</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">允许突破同源策略访问外部链接或者执行</span><span lang="EN-US"><span style="font-family: Times New Roman;">Javascript</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">代码。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">4</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">、在图形链接时如果指定的是调用</span><span lang="EN-US"><span style="font-family: Times New Roman;">Javascript</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">代码，注意应该避免出现逗号，因为这个设置是作为字符串（可能包括多个图形的链接，同时以逗号分隔）传递给</span><span lang="EN-US"><span style="font-family: Times New Roman;">Flash</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">接口的，它会对这个字符串利用逗号进行</span><span lang="EN-US"><span style="font-family: Times New Roman;">split</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">，从而出现</span><span lang="EN-US"><span style="font-family: Times New Roman;">Javascript</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">解析错误，无法正确执行</span><span lang="EN-US"><span style="font-family: Times New Roman;">Javascript</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">代码。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">5</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">、</span><span lang="EN-US"><span style="font-family: Times New Roman;">OFC4J</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">对</span><span lang="EN-US"><span style="font-family: Times New Roman;">OpenFlashChart</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的面向对象封装很好，但是目前版本不支持图形链接。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0;"><span lang="EN-US"><span style="font-size: small; font-family: Times New Roman;">&nbsp;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"><span style="font-size: small;">在项目使用过程中，发现在与公司开发框架的集成过程中出现一些问题：</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt;"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman';"><span style="mso-list: Ignore;"><span style="font-family: Times New Roman;"><span style="font-size: small;">1)</span><span style="font: 7pt &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">同样版本的</span><span lang="EN-US"><span style="font-family: Times New Roman;">IE</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">，有的</span><span lang="EN-US"><span style="font-family: Times New Roman;">IE</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">访问时出现</span><span lang="EN-US"><span style="font-family: Times New Roman;">JavaScript</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">错误，而有的</span><span lang="EN-US"><span style="font-family: Times New Roman;">IE</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">却很正常；</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt;"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman';"><span style="mso-list: Ignore;"><span style="font-family: Times New Roman;"><span style="font-size: small;">2)</span><span style="font: 7pt &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"><span style="font-size: small;">所有图形输出之前全都设置相同的字符集，却出现在有的图形中出现乱码，而在有的图形中中文显示正常。而另一个项目组在开发桌面应用时使用的就是该组件，却一直很正常，没有出现大的问题。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">该组件还不是很成熟，在我们开发报表，选择第三方组件时，应该谨慎。本人建议还是采用目前比较成熟的</span><span lang="EN-US"><span style="font-family: Times New Roman;">jFreeChart</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">组件进行报表的开发。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.1pt; mso-char-indent-count: 2.0;">&nbsp;</p>
<h1 style="margin: 17pt 0cm 16.5pt;"></h1>
          <br/>
          <span style="color:red;">
            <a href="http://crabdave.javaeye.com/blog/189653#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 05 May 2008 11:52:50 +0800</pubDate>
        <link>http://crabdave.javaeye.com/blog/189653</link>
        <guid>http://crabdave.javaeye.com/blog/189653</guid>
      </item>
      <item>
        <title>批量插入一个select出来的结果集，如果被插入的表里原本有某条记录时就不重复插入的SQL(DB2)</title>
        <author>crabdave</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://crabdave.javaeye.com">crabdave</a>&nbsp;
          链接：<a href="http://crabdave.javaeye.com/blog/189440" style="color:red;">http://crabdave.javaeye.com/blog/189440</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong><span style="text-decoration: underline;">问题：</span></strong>项目中需要批量插入一个select出来的结果集，如果被插入的表里原本就有某条记录的时候不能重复插入的SQL(DB2)。</p>
<p><strong><span style="text-decoration: underline;">环境描述：</span></strong><br />1)有两个表，加一些限制条件后，从tableNameB中select出一个结果集，再将其不重复地插入到tableNameA表中去。<br />2)tableNameB表中没有主键，三个字段A，B，C能够唯一确定一条记录。</p>
<p><strong><span style="text-decoration: underline;">解决方案：</span></strong><br />1)从talbeNameB中加上限制条件后select出一个结果集。<br />2)将这个结果集与被插入表进行左外连接。<br />3)加上这三个字段相等的限制，如果关联不为null，表示被插入表中有这行记录；否则，表示tableNameA表中没有这行记录，可以进行插入操作。</p>
<p><strong><span style="text-decoration: underline;">参考实现：</span></strong><br /><strong>&nbsp; 代码如下：</strong><br />insert into tableNameA <br />select&nbsp; <br />&nbsp;&nbsp; b.A ,b.B ,b.C ,b.D ,b.E ,b.F ,<br />&nbsp;&nbsp;&nbsp;&nbsp; from (&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select tab.*,row_number()over(partition by tab.A,tab.B,tab.C) req --去掉重复记录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from tableNameB tab&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where tab.A like 'a'&nbsp;&nbsp;&nbsp; --加入select的限制条件&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and tab.B=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) b&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; left outer join tableNameA c&nbsp;&nbsp;&nbsp; --左外连接<br />&nbsp;&nbsp;&nbsp; on b.A=c.A&nbsp;&nbsp; --判断tableNameA表中是否有重复的记录，三个相等条件确定唯一记录<br />&nbsp;&nbsp;&nbsp;&nbsp; and b.B=c.B&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; and b.C=c.C&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; where&nbsp; b.req=1&nbsp;&nbsp; --在select时有重复记录，则取第一条记录<br />&nbsp;&nbsp;&nbsp;&nbsp; and c.A is null ;</p>
          <br/>
          <span style="color:red;">
            <a href="http://crabdave.javaeye.com/blog/189440#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 04 May 2008 17:18:13 +0800</pubDate>
        <link>http://crabdave.javaeye.com/blog/189440</link>
        <guid>http://crabdave.javaeye.com/blog/189440</guid>
      </item>
      <item>
        <title>批量更新某一查询结果集的第N条到第M条的记录的SQL(DB2)</title>
        <author>crabdave</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://crabdave.javaeye.com">crabdave</a>&nbsp;
          链接：<a href="http://crabdave.javaeye.com/blog/189409" style="color:red;">http://crabdave.javaeye.com/blog/189409</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong><span style="text-decoration: underline;">问题：</span></strong>在项目开发中，我们有时候需要根据一些限制条件查询出一个结果集后，再将这个结果集的比如前10行进行某一update操作，后10行再进行另一个update操作。</p>
<p><strong><span style="text-decoration: underline;">解决方案：</span></strong><br />1)根据限制条件查询出结果集(该结果集应该以其主键进行排序)，在该结果集上给各行记录进行编号。<br />2)根据各行记录的编号取出一次取出前10行的记录或后10行的记录。<br />3)进行各自的update操作。</p>
<p><strong><span style="text-decoration: underline;">参考实现：<br /></span></strong>以下将以我在项目中多次用到的SQL为例。<br /><strong>代码如下：<br /></strong>update tableName b <br />set b.A=2 ,b.B=current date&nbsp; --B字段为日期类型<br />where exists (<br />&nbsp;&nbsp; select 1 from (<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select a.id,row_number()over(order by a.id) req --以tableName表的主键id字段进行排序<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from tableName a where a.C =22 and a.D=1) c --加上查询结果集的限制条件<br />&nbsp; where b.id=c.id and c.req&gt;=1 and c.req&lt;=3);--将要更新查询结果集的第1到第3条记录</p>
          <br/>
          <span style="color:red;">
            <a href="http://crabdave.javaeye.com/blog/189409#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 04 May 2008 16:41:12 +0800</pubDate>
        <link>http://crabdave.javaeye.com/blog/189409</link>
        <guid>http://crabdave.javaeye.com/blog/189409</guid>
      </item>
      <item>
        <title>屏蔽IE右键功能</title>
        <author>crabdave</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://crabdave.javaeye.com">crabdave</a>&nbsp;
          链接：<a href="http://crabdave.javaeye.com/blog/189360" style="color:red;">http://crabdave.javaeye.com/blog/189360</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt; <br />&lt;HTML&gt; <br />&lt;HEAD&gt; <br />&lt;TITLE&gt; New Document &lt;/TITLE&gt; <br />&lt;META NAME="Generator" CONTENT="EditPlus"&gt; <br />&lt;META NAME="Author" CONTENT=""&gt; <br />&lt;META NAME="Keywords" CONTENT=""&gt; <br />&lt;META NAME="Description" CONTENT=""&gt; <br />&lt;script language="JavaScript" event="onload" for="window"&gt; <br />//屏蔽IE右键功能&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; function Click(){ <br />&nbsp;&nbsp;&nbsp;&nbsp; window.event.returnValue=false; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;} <br />&nbsp;&nbsp;&nbsp; document.oncontextmenu=Click; <br />&lt;/script&gt; <br />&lt;/HEAD&gt; <br />&lt;BODY&gt; <br />&nbsp;&nbsp;&nbsp; 屏蔽IE右键功能 <br />&lt;/BODY&gt; <br />&lt;/HTML&gt;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://crabdave.javaeye.com/blog/189360#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 04 May 2008 14:55:59 +0800</pubDate>
        <link>http://crabdave.javaeye.com/blog/189360</link>
        <guid>http://crabdave.javaeye.com/blog/189360</guid>
      </item>
      <item>
        <title>关于ECSdie列表中隔页存值的问题(CheckBox_Select)</title>
        <author>crabdave</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://crabdave.javaeye.com">crabdave</a>&nbsp;
          链接：<a href="http://crabdave.javaeye.com/blog/188517" style="color:red;">http://crabdave.javaeye.com/blog/188517</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <u><strong>问题：</strong></u>在ECSide列表中，每行都有select标签，用户在第一页进行各行的select选择之后，执行页面翻页操作，翻到第二页，再回到第一页时不能回显原先对各行select标签所做的选择。同样还有对列表进行排序、修改每页显示行数等打乱现有列表排列的操作。<br /><br /><u><strong>环境描述:</strong></u><br />   1)在ECSide列表中，保存用户所选择的每行select值，在用户执行页面翻页、排序、修改每页显示行数后，<br />   仍能回显出原先用户所选的select值。在用户点击提交或保存操作后能将用户在不同页所选的值提交到后台。<br />   2)select值的形式：用户所选值_本行记录的ID，例如：OptionValue_132<br />   3)确保ECSdie列表所在页面在执行页面翻页、排序、修改每页显示行数等操作时，整个页面局部刷新(如果整个页面刷新将会清除后面将要提到的一个JavaScript全局变量)。<br />   4)关闭ECSide列表标签中的隔页存值属性(autoIncludeParameters)，使用该属性虽然可以达到隔页存值的目的，但不能回显原先用户所做的选择，并且在每次在执行页面翻页、排序、修改每页显示行数等操作时，不停的在创建hidden标签。<br /> <br /><u><strong>解决方案：</strong></u><br />   1)在用户点击select进行选值时，将其所选值存入一个作为全局变量的数组，并且在往该数组中存入用户所选值时，以该行记录的ID作为数组下标，将对应的值存入数组。在用户对select值进行修改时，取出该ID对应的数组下标的值，进行修改操作，若置回请选择时，根据该行记录的ID作为索引找到数组中对应的值，清空数组中的该值。<br />   2)用户在执行页面翻页、排序、修改每页显示行数后，取出当页所有select对象，将这些select对象与数组中的值进行匹配，如果有对应下标的值将其回显出来。回显的时候需要从ecside.js中抽象出一个JavaScript函数用于在执行页面翻页、排序、修改每页显示行数后执行。<br />   <strong>对ecside.js的修改如下：</strong><br />     <strong>(1)翻页：</strong>在ECSideUtil.gotoPage方法中取到新页面的HTML时(即执行ecsideObj.ajaxSubmit()之后)。<br />     <strong>(2)排序：</strong>在ECSideUtil.doSort方法中取到新页面的HTML时(即执行ecsideObj.ajaxSubmit()之后)。<br />     <strong>(3)修改每页显示多行：</strong>在ECSideUtil.changeRowsDisplayed方法中取到新页面的HTML时(即执行ecsideObj.ajaxSubmit()之后)。<br />     在以上三个方法之后添加如下代码：<br />      try{<br />         //新的HMTL加载完后执行的函数    <br />         setAfterView();<br />      }catch(e){    <br />    <br />      }<br />     这样我们在每个开发的页面，直接写function setAfterView(){}函数就可以实现要回显的操作了。 <br />   3)在用户点击“保存”或“提交”时，将数组中的值生成hidden连接到页面form中，提交到后台。<br />       var tempHid="";<br />       if(saveSelValues!=null&&saveSelValues.length>0){//如果数组中有值<br />           for(var i=parseInt(custIdTemp,10);i&lt;saveSelValues.length;i++){<br />              if(saveSelValues[i]!=null){<br />           			tempHid+="&lt;input type='hidden' name='delIdTypeReas' value='" +i+"_"+saveSelValues[i]+ "'/>";//创建hidden标签,其中value值中的i(即数组的索引为每行记录的ID号)。<br />           		}           <br />           }<br />           if(tempHid!=""){<br />           		document.forms[0].insertAdjacentHTML("beforeEnd", tempHid);//将数组中的值生成hidden连接到页面form中<br />           }<br />       }<br />   4)在后台通过java的split("_")方法取出各ID所对应的用户所选值，之后再进行数据库操作。<br /><br /><u><strong>备注：</strong></u>这种方式还适合于ECSide列表各中行的CheckBox、二级联动的select标签等的隔页存值问题。<br /><br /><u><strong>参考实现：</strong></u>以下将以我在项目中开发的在ECSide列表中各行CheckBox和二级联动的select标签的隔页存值为例。<br />   <strong>描述：</strong>在EC列表中，第一列为CheckBox(进入列表页面默认都被选中)，最后两列为一个二级联动的select标签(在CheckBox不被选中时，显示为可用，即默认为disabled)。<br />   <strong>代码如下：</strong><br />    <strong>CheckBox:(第一列)</strong><br />       &lt;ec:column width="30" ellipsis="true" property="selectedCust" title="选择" sortable="false" ><br />	  &lt;input type="checkbox" value="该行记录的ID" onclick="abledSel(this)" checked="checked" typeId="该行记录的ID" name="delCustCheck"/><br />       &lt;/ec:column><br />    <strong>Select:(最后两列)</strong><br />       &lt;select name="delType" typeId="该行记录的ID"  disabled="disabled" id="firstSel_该行记录的ID" onchange="selSecondSel(this)">一级select菜单<br />            &lt;option value='1' selected="selected">一级菜单1&lt;/option><br />	    &lt;option value='2'>一级菜单2&lt;/option><br />       &lt;select name="delRes"  typeId="该行记录的ID" disabled="disabled" id="secondSel_该行记录的ID" onchange="saveSelValue(this)">二级select菜单<br />            &lt;option value='1_1'selected="selected">二级菜单1&lt;/option>  其中1_1中的第一个1表示一级菜单1的value值，第二个1表示二级菜单1的value值<br />	    &lt;option value='1_2'>二级菜单2&lt;/option><br />					<br />    <strong>准备select菜单数据：</strong><br />         //准备一级菜单数据<br />		var delType=new Array();<br /> <br />		delType[0]=new Array();<br />		delType[0].push('一级菜单1');<br />		delType[0].push('1'); <br /> <br />		delType[1]=new Array();<br />		delType[1].push('一级菜单2');<br />		delType[1].push('2'); <br /><br />	//准备二级菜单数据<br />		var delReas=new Array();<br /> <br />		delReas[0]=new Array();<br />		delReas[0].push('二级菜单1');<br />		delReas[0].push('1');<br />		delReas[0].push('1'); //属于一级菜单1<br /> <br />		delReas[1]=new Array();<br />		delReas[1].push('二级菜单2');<br />		delReas[1].push('2');<br />		delReas[1].push('1');  //属于一级菜单1<br /> <br />		delReas[2]=new Array();<br />		delReas[2].push('二级菜单3');<br />		delReas[2].push('3');<br />		delReas[2].push('2');  //属于一级菜单2<br />      <strong>JavaScript函数：</strong><br />//根据所选的一级菜单展示二级菜单<br />          function selSecondSel(firstSel){<br />	//取出一级菜单选择的是哪一个<br />   	var sel_Index = firstSel.selectedIndex;<br />	var temp=firstSel.options[sel_Index].value;<br />	var rowCode=firstSel.typeId;<br />	//设置二级菜单<br />	var sel_Obj_s=document.getElementById("secondSel_"+rowCode);<br />	sel_Obj_s.innerHTML="";<br />	var flag=true;<br />	//alert(delReas.length);<br />	for(var i=0;i&lt;delReas.length;i++){<br />	  if(delReas[i][2]==temp){<br />	  <br />	   var oOption = document.createElement("OPTION");<br />		sel_Obj_s.options.add(oOption);<br />		oOption.innerText = delReas[i][0];<br />		oOption.value = delReas[i][2]+"_"+delReas[i][1];<br />		if(flag){<br />		      saveSelValues[rowCode]=delReas[i][2]+"_"+delReas[i][1];<br />  			//  alert("4_saveSelValues["+rowCode+"]="+saveSelValues[rowCode]);<br />  			  flag=false;	<br />		}<br />			<br />		}<br />	 }<br />	}<br /> <br /> //将客户列表的checkbox和select设置为可用<br />function enableCheckSel(){<br /><br />   var dcc=document.getElementsByName("delCustCheck");<br />   if(dcc!=null&&dcc.length>0){<br />      for(var i=0;i&lt;dcc.length;i++){<br />          dcc[i].disabled="";<br />      }<br />   }<br />   if(saveSelValues!=null&&saveSelValues.length>0){<br />   	var temp=document.getElementsByTagName("select");<br />       for(var i=0;i&lt;temp.length;i++){<br />       		if(temp[i].typeId!=undefined&&temp[i]!=null){<br />       			if(saveSelValues[temp[i].typeId]!=undefined&&saveSelValues[temp[i].typeId]!=null&&saveSelValues[temp[i].typeId]!=""){<br />       			temp[i].disabled="";<br />       			}<br />       		}<br />       }<br />   }<br />} <br /><br />//点击checkbox时执行<br />var custIdTemp=0;//记录用户所点选过的最小值<br />function abledSel(abledSel){   <br />    var as=abledSel.value;<br />    if(parseInt(custIdTemp,10)==0){<br />       	custIdTemp=as;<br />    }<br />    if(parseInt(as,10)&lt;parseInt(custIdTemp,10)){<br />    	custIdTemp=as;<br />    }<br />    var ce=abledSel.checked<br />  <br />    var temp=new Array();<br />    temp[0]=document.getElementById("firstSel_"+as);<br />    temp[1]=document.getElementById("secondSel_"+as);<br />    if(temp.length>0){ <br />       for(var i=0;i&lt;temp.length;i++){  <br />              var selRowCode=as;<br />              if(ce){//如果checkbox变为被选中，select标签不可用，清除数组中的存值<br />              	 temp[i].disabled="true";              	 <br />              	 saveSelValues[selRowCode]=null;             <br />              }else{//如果checkbox变为没有被选中，将对应的select标签设置为可用，在数组中添加相应的select值<br />             	 temp[i].disabled="";<br />             	 if(temp[i].id==("secondSel_"+selRowCode)){<br />             		var sel_Index = temp[i].selectedIndex;<br />			var temp1=temp[i].options[sel_Index].value;             	 <br />             	 	saveSelValues[selRowCode]=temp1;         <br />             	 }<br />              }        <br />       }<br />    }<br />}<br />//保存用户所选value值的数组<br />var saveSelValues=new Array();<br />//保存用户所选的select值<br />function saveSelValue(sel_Obj){<br /> //取出一级菜单选择的是哪一个<br />   var sel_Index = sel_Obj.selectedIndex;<br />   var temp=sel_Obj.options[sel_Index].value;<br />   var selRowCode=sel_Obj.typeId;<br />   saveSelValues[selRowCode]=temp;<br />}<br />//在列表执行页面翻页、排序、修改每页显示行数等操作后执行回显<br />function setAfterView(){<br />        if(saveSelValues!=null&&saveSelValues.length>0){<br />    var delCustCheck=document.getElementsByName("delCustCheck");<br />    	for(var k=0;k&lt;delCustCheck.length;k++){<br />    		var i=delCustCheck[k].typeId;<br />    	    if(saveSelValues[i]!=null){<br />    	       var firstSel=document.getElementById("firstSel_"+i);<br />    	       var secondSel=document.getElementById("secondSel_"+i);<br />    	       if(firstSel==undefined||firstSel==null||secondSel==undefined||secondSel==null){<br />    	           continue;<br />    	       }<br />    	           delCustCheck[k].checked="";<br />    	       if(firstSel!=undefined&&firstSel!=null&&secondSel!=undefined&&secondSel!=null){<br />    	       			var temp=saveSelValues[i].split("_");<br />    	       			firstSel.disabled="";<br />    	       			secondSel.disabled="";<br />    	       			firstSel.value=temp[0];<br />    	       			temp=saveSelValues[i];<br />    	       			selSecondSel(firstSel);//执行该函数后会将该二级菜单的第一个选项存入数组，注意将原值保留，修改数组中的该值<br />    	       			secondSel.value=temp;<br />    	       			saveSelValues[i]=temp;<br />    	       }<br />    	    }<br />    	}<br />    }<br />}<br /><br />注意：JavaScript里数组的最大长度是： 4294967295，即2^32 - 1，数组的下标（即该行记录的ID）不要超过这个数。<br /><br />以上仅为一个小小的参考实现，不过在效率上可能还有些欠缺，还有待优化，希望能启到抛砖引玉的作用。
          <br/>
          <span style="color:red;">
            <a href="http://crabdave.javaeye.com/blog/188517#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Apr 2008 18:29:45 +0800</pubDate>
        <link>http://crabdave.javaeye.com/blog/188517</link>
        <guid>http://crabdave.javaeye.com/blog/188517</guid>
      </item>
      <item>
        <title>关于在EC列表页面点击标题查看明细后不能回到原来所在页的问题</title>
        <author>crabdave</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://crabdave.javaeye.com">crabdave</a>&nbsp;
          链接：<a href="http://crabdave.javaeye.com/blog/188353" style="color:red;">http://crabdave.javaeye.com/blog/188353</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <u><strong>问题：</strong></u>在使用ECside分页框架的过程中，我们在EC列表页面点击某一行记录,进入该行记录的详细信息页面，此时我们在返回时却又只能返回到第一页，不能返回原来所在的第二页。其中还有原来我们设置好的每页显示多少行，也变回原来的默认值了，排序方式也变成默认的了。<br /><u><strong>解决方案：</strong></u>在明细页面点击返回时，需要带上几个参数，并且这些参数要用hidden来存储，ECside框架会用request.getParameter()方法来取值。<br />主要参数如下：<br />	&lt;input type="hidden"  name="ec_i"  value="StrategyListTable"/>ec_i存储的是EC列表的tableId,该tableId为StrategyListTable<br />	&lt;input type="hidden"  name="StrategyListTable_crd" value="20"/>StrategyListTable_crd存储的是每页显示多少行，该参数名是由tableId+"_crd"组成<br />	&lt;input type="hidden"  name="StrategyListTable_p" value="1"/>StrategyListTable_p存储的是当前是第几页，该参数名是由tableId+"_p"组成<br />	&lt;input type="hidden"  name="StrategyListTable_s_strategyName" value="asc"/>StrategyListTable_s_strategyName存储的是用户选择的排序字段和方式，该参数名是由tableId+"_s_"+排序字段 组成，它的value值为asc和desc可选，表示排序方式。<br /><u><strong>参考实现：</strong></u>在我的参与的项目开发过程中，我们的系统采用Struts+Spring+Hibernate，所有的action都继承自BaseAction,我们直接在这个基类中取出这些参数，再将其传入明细页面，在明细页面只用拷贝几行固定的代码，在返回提交表单的时候，顺便提交一下这些参数就OK了。<br />BaseAction中的代码：<br />			String ec_i="";<br />			ec_i=req.getParameter("ec_i");<br />			<br />			if(ec_i!=null&&!ec_i.equals("")){//存在EC显示属性<br />				String cp=req.getParameter(ec_i+"_p");//取出当前第几页<br />				String crd=req.getParameter(ec_i+"_crd");//取出每页多少行				<br />				String sort=req.getParameter("sort");//取出排序方式<br />				String sortProp=req.getParameter("sortProp");//取出排序字段<br />				//判断前台是否有排序信息，如果前台没有排序，则这两个属性都是null<br />				if(sort!=null&&!sort.equals("")&&sortProp!=null&&!sortProp.equals("")){<br />					log.info("原页面取到的排序属性为："+sortProp+"方式为："+sort);<br />					req.setAttribute("ECSort", sort);<br />					req.setAttribute("ECSortProp",sortProp);<br />				}<br />				log.info("原页面提交的列表名称为："+ec_i+" 当前是第 "+cp+" 页，每页显示 "+crd+" 行");<br />				req.setAttribute("ECI", ec_i);<br />				req.setAttribute("ECTable_p", cp);<br />				req.setAttribute("ECTable_crd", crd);<br />			}<br />明细页面的固定代码：<br />	&lt;input type="hidden"  name="ec_i"  value="&lt;c:out value='${ECI}'/>"/><br />	&lt;input type="hidden"  name="${ECI}_crd" value="&lt;c:out value='${ECTable_crd}'/>"/><br />	&lt;input type="hidden"  name="${ECI}_p" value="&lt;c:out value='${ECTable_p}'/>"/><br />	&lt;input type="hidden"  name="&lt;c:out value='${ECSortProp}'/>" value="&lt;c:out value='${ECSort}'/>"/><br />	&lt;input type="hidden"  name="sort" value="&lt;c:out value='${ECSort}'/>"/><br />	&lt;input type="hidden"  name="sortProp" value="&lt;c:out value='${ECSortProp}'/>"/><br /><br /><u><strong>备注：</strong></u>在项目开发过程中，会有这种情况：从第一个EC列表中点击某行记录进入明细页面，而在这个明细页面中，还有EC列表，在这种情况下，以上这些参数就会重复出现，但ECside框架只会取出其中一个，这时候要注意，在明细页面返回上一个EC列表的时候，要提交上一个EC列表的参数。
          <br/>
          <span style="color:red;">
            <a href="http://crabdave.javaeye.com/blog/188353#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Apr 2008 11:50:02 +0800</pubDate>
        <link>http://crabdave.javaeye.com/blog/188353</link>
        <guid>http://crabdave.javaeye.com/blog/188353</guid>
      </item>
  </channel>
</rss>