﻿<?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-Understanding Java-随笔分类-Java组件</title><link>http://www.blogjava.net/botson/category/30212.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 23 Apr 2008 03:44:39 GMT</lastBuildDate><pubDate>Wed, 23 Apr 2008 03:44:39 GMT</pubDate><ttl>60</ttl><item><title>DWR的DWRUtil.addRows方法的使用</title><link>http://www.blogjava.net/botson/archive/2008/04/23/194952.html</link><dc:creator>Jam Chan</dc:creator><author>Jam Chan</author><pubDate>Wed, 23 Apr 2008 02:05:00 GMT</pubDate><guid>http://www.blogjava.net/botson/archive/2008/04/23/194952.html</guid><wfw:comment>http://www.blogjava.net/botson/comments/194952.html</wfw:comment><comments>http://www.blogjava.net/botson/archive/2008/04/23/194952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/botson/comments/commentRss/194952.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/botson/services/trackbacks/194952.html</trackback:ping><description><![CDATA[最近想通过DWR做查询，虽然可以结合ext使用，但是使用太多框架会增加客户端的负荷，因此用到了DWRUtil.addRows方法。<br />
如果想在每行记录的最后添加&#8220;编辑&#8221;或&#8220;删除&#8221;的超级连接，可以通过document.createElement()来处理，请看以下的例子。<br />
<br />
现在需要把封装了这个JavaBean数据的 java.util.List对象 传到客户端<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;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Fund&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;java.io.Serializable&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Fields</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Long&nbsp;fundNo;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;fundName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Float&nbsp;price;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;description;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;status;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Date&nbsp;createdDate;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <span style="color: #179837;"><span style="color: #179837;"><span style="color: red;"><span style="color: #2d9e1d;">//Getter &amp; Setter</span></span></span></span><span style="color: #179837;"></span><br />
}<br />
</span></div>
<br />
之前如何调用就省略了，想了解DWR的详细信息可以到官方网站<a target="_blank" href="http://getahead.org/dwr">http://getahead.org/dwr</a>学习<br />
<br />
现在，我们看看客户端的回调函数<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;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; function</span><span style="color: #000000;">&nbsp;callBack(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWRUtil.removeAllRows(</span><span style="color: #000000;">"tbodyId</span><span style="color: #000000;">"</span><span style="color: #000000;">); <span style="color: #2d9e1d;">// "tbodyId"是需要嵌入行的元素ID</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWRUtil.addRows(</span><span style="color: #000000;">"</span><span style="color: #000000;">tbodyId</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;data,&nbsp;cellFunctions);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;cellFunctions&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(item)&nbsp;{&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;item.fundNo;&nbsp;},&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(item)&nbsp;{&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;item.fundName;&nbsp;},&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(item)&nbsp;{&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;item.price;&nbsp;},&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(item)&nbsp;{&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;item.description;&nbsp;},&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(item)&nbsp;{&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;item.status</span><span style="color: #000000;">==</span><span style="color: #000000;">"</span><span style="color: #000000;">1</span><span style="color: #000000;">"</span><span style="color: #000000;">?</span><span style="color: #000000;">"</span><span style="color: #000000;">正常</span><span style="color: #000000;">"</span><span style="color: #000000;">:</span><span style="color: #000000;">"</span><span style="color: #000000;">冻结</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;},&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(item)&nbsp;{&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;editLink&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.createElement(</span><span style="color: #000000;">"</span><span style="color: #000000;">a</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editLink.setAttribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">href</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">edit.do?id=</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">item.fundNo);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editLink.innerHTML</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span>编辑<span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;editLink;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ];</span></div>
<br />
这样在每行的最后一行就会增加&#8220;编辑&#8221;的超级连接了。编辑的具体工作想发给哪个后台类处理，修改一下href属性吧。<br />
<br />
<br />
<img src ="http://www.blogjava.net/botson/aggbug/194952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/botson/" target="_blank">Jam Chan</a> 2008-04-23 10:05 <a href="http://www.blogjava.net/botson/archive/2008/04/23/194952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用Log4j配置</title><link>http://www.blogjava.net/botson/archive/2008/03/20/187404.html</link><dc:creator>Jam Chan</dc:creator><author>Jam Chan</author><pubDate>Thu, 20 Mar 2008 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/botson/archive/2008/03/20/187404.html</guid><wfw:comment>http://www.blogjava.net/botson/comments/187404.html</wfw:comment><comments>http://www.blogjava.net/botson/archive/2008/03/20/187404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/botson/comments/commentRss/187404.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/botson/services/trackbacks/187404.html</trackback:ping><description><![CDATA[<div>
<ul>
    <li><strong>log4j配置文件基本含义说明</strong></li>
</ul>
<div>log4j.properties配置文件讲解如下：
<div class="code"># Set root logger level to DEBUG and its only appender to A1 <br />
#log4j中有五级logger <br />
#FATAL 0 <br />
#ERROR 3 <br />
#WARN 4 <br />
#INFO 6 <br />
#DEBUG 7 </div>
<div class="code"><br />
<strong>配置根Logger，其语法为：</strong><br />
#log4j.rootLogger = [ level ] , appenderName, appenderName, &#8230;<br />
log4j.rootLogger=INFO, A1 ,R<br />
#这一句设置以为着所有的log都输出<br />
#如果为log4j.rootLogger=WARN, 则意味着只有WARN,ERROR,FATAL<br />
#被输出，DEBUG,INFO将被屏蔽掉.<br />
# A1 is set to be a ConsoleAppender. <br />
#log4j中Appender有几层如控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等<br />
#ConsoleAppender输出到控制台 <br />
log4j.appender.A1=org.apache.log4j.ConsoleAppender <br />
# A1 使用的输出布局，其中log4j提供4种布局. org.apache.log4j.HTMLLayout（以HTML表格形式布局）<br />
#org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br />
#org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br />
#org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息） </div>
<p class="code">log4j.appender.A1.layout=org.apache.log4j.PatternLayout <br />
#灵活定义输出格式 具体查看log4j javadoc org.apache.log4j.PatternLayout <br />
#d 时间 .... <br />
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n <br />
#R 输出到文件 RollingFileAppender的扩展，可以提供一种日志的备份功能。<br />
log4j.appender.R=org.apache.log4j.RollingFileAppender <br />
#日志文件的名称<br />
log4j.appender.R.File=log4j.log <br />
#日志文件的大小<br />
log4j.appender.R.MaxFileSize=100KB <br />
# 保存一个备份文件<br />
log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.TTCCLayout<br />
#log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n</p>
<br />
<strong>配置根Logger，其语法为：<br />
</strong>
<div class="code">log4j.rootLogger = [ level ] , appenderName, appenderName, ...</div>
<br />
level 是日志记录的优先级<br />
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
<p><strong>配置日志信息输出目的地Appender，其语法为</strong><br />
</p>
<div class="code">log4j.appender.appenderName = fully.qualified.name.of.appender.class<br />
log4j.appender.appenderName.option1 = value1<br />
...<br />
log4j.appender.appenderName.option = valueN</div>
<br />
<strong>Log4j提供的appender有以下几种：</strong><br />
org.apache.log4j.ConsoleAppender（控制台），<br />
org.apache.log4j.FileAppender（文件），<br />
org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件），<br />
org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件），<br />
org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）
<p><strong>配置日志信息的格式（布局），其语法为：<br />
</strong>
</p>
<div class="div">log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br />
log4j.appender.appenderName.layout.option1 = value1<br />
....<br />
log4j.appender.appenderName.layout.option = valueN</div>
<br />
<strong>Log4j提供的layout有以下几种：<br />
</strong>org.apache.log4j.HTMLLayout（以HTML表格形式布局），<br />
org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br />
org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br />
org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）</div>
</div>
<font id="zoom" class="f14"><font color="#cccccc"><span class="content"></span></font></font>
<ul>
    <li><font id="zoom" class="f14"><font color="#cccccc"><span class="content"><span style="color: red;"><span style="color: #020805;"><span style="font-weight: bold;">常用log4j配置</span></span></span></span></font></font></li>
</ul>
<font id="zoom" class="f14"><font color="#cccccc"><span class="content"><span style="color: red;"><span style="color: #020805;">一般可以采用两种方式，.properties和.xml,下面举两个简单的例子：<br />
<span style="color: #121874; font-weight: bold;">一、log4j.properties</span><br />
### 设置org.zblog域对应的级别INFO,DEBUG,WARN,ERROR和输出地A1，A2 ##<br />
log4j.category.org.zblog=ERROR,A1 <br />
log4j.category.org.zblog=INFO,A2 <br />
log4j.appender.A1=org.apache.log4j.ConsoleAppender <br />
### 设置输出地A1，为ConsoleAppender(控制台) ##<br />
log4j.appender.A1.layout=org.apache.log4j.PatternLayout <br />
### 设置A1的输出布局格式PatterLayout,(可以灵活地指定布局模式）##<br />
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n <br />
### 配置日志输出的格式##<br />
log4j.appender.A2=org.apache.log4j.RollingFileAppender <br />
### 设置输出地A2到文件（文件大小到达指定尺寸的时候产生一个新的文件）##<br />
log4j.appender.A2.File=E:/study/log4j/zhuwei.html <br />
### 文件位置##<br />
log4j.appender.A2.MaxFileSize=500KB <br />
### 文件大小##<br />
log4j.appender.A2.MaxBackupIndex=1 <br />
log4j.appender.A2.layout=org.apache.log4j.HTMLLayout <br />
##指定采用html方式输出<br />
<strong><span style="color: #121874;">二、log4j.xml</span></strong><br />
&lt;?xml version="1.0" encoding="GB2312" ?&gt;<br />
&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt;<br />
&lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt;<br />
&lt;appender name="org.zblog.all" class="org.apache.log4j.RollingFileAppender"&gt;<br />
&lt;!-- 设置通道ID:org.zblog.all和输出方式：org.apache.log4j.RollingFileAppender --&gt;<br />
&nbsp;&nbsp; &lt;param name="File" value="E:/study/log4j/all.output.log" /&gt;&lt;!-- 设置File参数：日志输出文件名 --&gt;<br />
&nbsp;&nbsp; &lt;param name="Append" value="false" /&gt;&lt;!-- 设置是否在重新启动服务时，在原有日志的基础添加新日志 --&gt;<br />
&nbsp;&nbsp; &lt;param name="MaxBackupIndex" value="10" /&gt; <br />
&nbsp;&nbsp; &lt;layout class="org.apache.log4j.PatternLayout"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="ConversionPattern" value="%p (%c:%L)- %m%n" /&gt;&lt;!-- 设置输出文件项目和格式 --&gt;<br />
&nbsp;&nbsp; &lt;/layout&gt;<br />
&lt;/appender&gt;<br />
&lt;appender name="org.zblog.zcw" class="org.apache.log4j.RollingFileAppender"&gt;<br />
&nbsp;&nbsp; &lt;param name="File" value="E:/study/log4j/zhuwei.output.log" /&gt;<br />
&nbsp;&nbsp; &lt;param name="Append" value="true" /&gt;<br />
&nbsp;&nbsp; &lt;param name="MaxFileSize" value="10240" /&gt; &lt;!-- 设置文件大小 --&gt;<br />
&nbsp;&nbsp; &lt;param name="MaxBackupIndex" value="10" /&gt; <br />
&nbsp;&nbsp; &lt;layout class="org.apache.log4j.PatternLayout"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="ConversionPattern" value="%p (%c:%L)- %m%n" /&gt;<br />
&nbsp;&nbsp; &lt;/layout&gt;<br />
&lt;/appender&gt;<br />
&lt;logger name="zcw.log"&gt; &lt;!-- 设置域名限制，即zcw.log域及以下的日志均输出到下面对应的通道中 --&gt;<br />
&nbsp;&nbsp; &lt;level value="debug" /&gt;&lt;!-- 设置级别 --&gt;<br />
&nbsp;&nbsp; &lt;appender-ref ref="org.zblog.zcw" /&gt;&lt;!-- 与前面的通道id相对应 --&gt;<br />
&lt;/logger&gt;<br />
&lt;root&gt; &lt;!-- 设置接收所有输出的通道 --&gt;<br />
&nbsp;&nbsp; &lt;appender-ref ref="org.zblog.all" /&gt;&lt;!-- 与前面的通道id相对应 --&gt;<br />
&lt;/root&gt;<br />
&lt;/log4j:configuration&gt;<br />
<strong><span style="color: #121874;">三、配置文件加载方法：</span></strong><br />
import org.apache.log4j.Logger;<br />
import org.apache.log4j.PropertyConfigurator;<br />
import org.apache.log4j.xml.DOMConfigurator;<br />
public class Log4jApp {<br />
&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOMConfigurator.configure("E:/study/log4j/log4j.xml");//加载.xml文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加载.properties文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Logger log=Logger.getLogger("org.zblog.test");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info("测试");<br />
&nbsp;&nbsp; }<br />
}<br />
<strong><span style="color: #121874;">四、项目使用log4j</span></strong><br />
在web
应用中，可以将配置文件的加载放在一个单独的servlet中，并在web.xml中配置该servlet在应用启动时候加载。对于在多人项目中，可以给
每一个人设置一个输出通道，这样在每个人在构建Logger时，用自己的域名称，让调试信息输出到自己的log文件中。<br />
五、常用输出格式<br />
# -X号:X信息输出时左对齐；<br />
# %p:日志信息级别<br />
# %d{}:日志信息产生时间<br />
# %c:日志信息所在地（类名）<br />
# %m:产生的日志具体信息<br />
# %n:输出日志信息换行</span></span></span></font></font>
<img src ="http://www.blogjava.net/botson/aggbug/187404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/botson/" target="_blank">Jam Chan</a> 2008-03-20 09:39 <a href="http://www.blogjava.net/botson/archive/2008/03/20/187404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】Log4j基本使用方法</title><link>http://www.blogjava.net/botson/archive/2008/03/20/187402.html</link><dc:creator>Jam Chan</dc:creator><author>Jam Chan</author><pubDate>Thu, 20 Mar 2008 01:27:00 GMT</pubDate><guid>http://www.blogjava.net/botson/archive/2008/03/20/187402.html</guid><wfw:comment>http://www.blogjava.net/botson/comments/187402.html</wfw:comment><comments>http://www.blogjava.net/botson/archive/2008/03/20/187402.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/botson/comments/commentRss/187402.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/botson/services/trackbacks/187402.html</trackback:ping><description><![CDATA[<p>Log4j由三个重要的组件构成：日志信息的优先级，日志信息的输出目的地，日志信息的输出格式。日志信息的优先级从高到低有ERROR、
WARN、INFO、DEBUG，分别用来指定这条日志信息的重要程度；日志信息的输出目的地指定了日志将打印到控制台还是文件中；而输出格式则控制了日
志信息的显示内容。</p>
<p><a name="N100D7"><span class="smalltitle"><span style="color: red;">3.1.定义配置文件</span></span></a></p>
<p>
</p>
<p>其实您也可以完全不使用配置文件，而是在代码中配置Log4j环境。但是，使用配置文件将使您的应用程序更加灵活。</p>
<p>Log4j支持两种配置文件格式，一种是XML格式的文件，一种是Java特性文件（键=值）。下面我们介绍使用Java特性文件做为配置文件的方法：</p>
<ol>
    <li>	配置根Logger，其语法为：
    <p>log4j.rootLogger = [ level ] , appenderName, appenderName, &#8230;</p>
    其中，level
    是日志记录的优先级，分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别，优
    先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别，您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定
    义了INFO级别，则应用程序中所有DEBUG级别的日志信息将不被打印出来。 <br />
    appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
    </li>
    <li>配置日志信息输出目的地Appender，其语法为
    <pre>log4j.appender.appenderName = fully.qualified.name.of.appender.class<br />
    log4j.appender.appenderName.option1 = value1<br />
    &#8230;<br />
    log4j.appender.appenderName.option = valueN</pre>
    其中，Log4j提供的appender有以下几种：
    <br />
    org.apache.log4j.ConsoleAppender（控制台），
    <br />
    org.apache.log4j.FileAppender（文件），
    <br />
    org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件），org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件），
    <br />
    org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）
    </li>
    <li>配置日志信息的格式（布局），其语法为：
    <pre>log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br />
    log4j.appender.appenderName.layout.option1 = value1<br />
    &#8230;<br />
    log4j.appender.appenderName.layout.option = valueN</pre>
    其中，Log4j提供的layout有以下几种：
    <br />
    org.apache.log4j.HTMLLayout（以HTML表格形式布局），
    <br />
    org.apache.log4j.PatternLayout（可以灵活地指定布局模式），
    <br />
    org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），
    <br />
    org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）
    </li>
</ol>
<p><a name="N1010C"><span class="smalltitle"><span style="color: red;">3.2.在代码中使用Log4j</span></span></a></p>
<p>
</p>
<p>下面将讲述在程序代码中怎样使用Log4j。</p>
<p>
<strong>3.2.1.得到记录器</strong>
</p>
<p>使用Log4j，第一步就是获取日志记录器，这个记录器将负责控制日志信息。其语法为：</p>
<p>public static Logger getLogger( String name)，</p>
<p>通过指定的名字获得记录器，如果必要的话，则为这个名字创建一个新的记录器。Name一般取本类的名字，比如：</p>
<p>static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ;</p>
<p>
<strong>3.2.2.读取配置文件</strong>
</p>
<p>当获得了日志记录器之后，第二步将配置Log4j环境，其语法为：
<br />
BasicConfigurator.configure ()： 自动快速地使用缺省Log4j环境。
<br />
PropertyConfigurator.configure ( String configFilename) ：读取使用Java的特性文件编写的配置文件。
<br />
DOMConfigurator.configure ( String filename ) ：读取XML形式的配置文件。
</p>
<p>
<strong>3.2.3.插入记录信息（格式化日志信息）</strong>
</p>
<p>当上两个必要步骤执行完毕，您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方，其语法如下：</p>
<p>
Logger.debug ( Object message ) ;
<br />
Logger.info ( Object message ) ;
<br />
Logger.warn ( Object message ) ;
<br />
Logger.error ( Object message ) ;
</p>
<br />
<br />
<p><a name="resources"><span class="atitle">参考资料 </span></a></p>
<p>如果您想更深入地了解Log4j，请经常访问下面提及的相关链接。</p>
<p>Log4j项目主页------------------------------------------------------
<a href="http://www.log4j.org/">www.log4j.org</a>
</p>
<p>Log4j FAQ    -------------------------------------------------------
<a href="http://www.log4j.org/log4j/faq.html">www.log4j.org/log4j/faq.html</a></p>
<p><br />
</p>
<p><a name="author"><span class="atitle">关于作者</span></a></p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td colspan="3"><img alt="" src="http://www.ibm.com/i/c.gif" height="5" width="100%" /></td>
        </tr>
        <tr align="left" valign="top">
            <td><br />
            </td>
            <td><img alt="" src="http://www.ibm.com/i/c.gif" height="5" width="4" /></td>
            <td width="100%">
            <p>葵贞祥，SCJP（Sun Certified Java 2 Programmer），具有7年国内国外知名企业工作经历，目前兴趣集中在对Java的C/S、B/S大型应用上，您可以通过
            <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#104;&#105;&#110;&#101;&#115;&#101;&#109;&#97;&#114;&#115;&#64;&#104;&#111;&#116;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#63;&#99;&#99;&#61;&#99;&#104;&#105;&#110;&#101;&#115;&#101;&#109;&#97;&#114;&#115;&#64;&#104;&#111;&#116;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">chinesemars@hotmail.com</a>和他联系。
            </p>
            </td>
        </tr>
    </tbody>
</table>
<p>
</p>
<img src ="http://www.blogjava.net/botson/aggbug/187402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/botson/" target="_blank">Jam Chan</a> 2008-03-20 09:27 <a href="http://www.blogjava.net/botson/archive/2008/03/20/187402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】EC Side分页组件</title><link>http://www.blogjava.net/botson/archive/2008/03/19/187351.html</link><dc:creator>Jam Chan</dc:creator><author>Jam Chan</author><pubDate>Wed, 19 Mar 2008 12:50:00 GMT</pubDate><guid>http://www.blogjava.net/botson/archive/2008/03/19/187351.html</guid><wfw:comment>http://www.blogjava.net/botson/comments/187351.html</wfw:comment><comments>http://www.blogjava.net/botson/archive/2008/03/19/187351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/botson/comments/commentRss/187351.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/botson/services/trackbacks/187351.html</trackback:ping><description><![CDATA[<a target="_blank" href="http://fins.javaeye.com/blog/58216">http://fins.javaeye.com/blog/58216</a><br />
<br />
EC Side介绍：
<br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br />
作者： fins （ name: Wei Zijun  ，  email:fins@163.com  ， blog:http://fins.javaeye.com  ）
<br />
<br />
EC Side是一个开源的列表组件。
<br />
他源自著名开源列表组件 eXtremeComponents （http://www.extremecomponents.org），
<br />
但现在已经脱离eXtremeComponents,独立发展（仍有大量代码来自 eXtremeComponents）。
<br />
&#8220;做最实用易用的列表组件&#8221;是ECSide最终的目标。
<br />
<br />
ECSide发布地址：
<br />
1.25 版	： <a target="_blank" href="http://fins.javaeye.com/blog/58216">http://fins.javaeye.com/blog/58216</a>
<br />
1.1 final版： <a target="_blank" href="http://fins.javaeye.com/blog/54265 ">http://fins.javaeye.com/blog/54265</a><br />
1.1 RC1版：   <a target="_blank" href="http://fins.javaeye.com/blog/51068 ">http://fins.javaeye.com/blog/51068</a><br />
1.0 RC1版： <a target="_blank" href="http://fins.javaeye.com/blog/40190">http://fins.javaeye.com/blog/40190</a>
<br />
ECSide圈子：
<br />
<a target="_blank" href="http://ecside.javaeye.com/">http://ecside.javaeye.com/</a>&nbsp;<br />
ECSide综合讨论专用帖：
<br />
<a target="_blank" href="http://fins.javaeye.com/blog/48723">http://fins.javaeye.com/blog/48723</a>&nbsp;<br />
<br />
<br />
<br />
============================
<br />
EC SIDE CHANGELOG
<br />
============================
<br />
<a target="_blank" href="http://ecside.javaeye.org ">http://ecside.javaeye.org/</a><br />
<br />
===============================
<br />
2007-03-13
<br />
ECSide 1.25 发布
<br />
===============================
<br />
距离上一个版本，发布已经整整过去一个月了，也是放出新版本的时候了。
<br />
这么久没有更新原因有2：1是我最近确实太忙了，2是ECSIDE的发展遇到了一些瓶颈。呵呵
<br />
不过好在现在新版本终于可以拿出来了。
<br />
新功能主要有：
<br />
1 增加了escape功能，有了他就可以在一定程度上避免因数据中有特殊字符而带来的麻烦了。
<br />
用法：
<br />
&lt;ec:column property="aaa" &gt;#_ESCAPE: 你的文本asda1231#[ESC_HTML:${user.USERNAME}]另外一些文本&lt;/ec:column&gt;
<br />
&lt;ec:column .... value="#_ESCAPE:#[ESC_HTML:${user.USERNAME}]" /&gt;
<br />
<br />
#[ESC_HTML: .... ] 中间的部分是要ESCAPE的 ，有三种方式：ESC_HTML  ESC_XML  ESC_JS。
<br />
可以联合使用,但不能嵌套使用。
<br />
例如：  #_ESCAPE: asdasd #[ESC_HTML:qqqqqqqqq]另外一些文本 #[ESC_JS:qqqqqqqqq]
<br />
<br />
如果要ESCAPE的字符中有] 那么请使用 #~ESC_HTML: .... ~ 形式
<br />
如果要ESCAPE的字符中有~ 那么请使用 #^ESC_HTML: .... ^ 形式
<br />
<br />
2 支持打开一个shadowRow时候,关闭其他的shadowRow功能
<br />
如果不想使用这个功能，可以在js里设置
<br />
ecsideObj为 js初始化的ecside对象。
<br />
ecsideObj.autoCloseOtherShadowRow=false;
<br />
<br />
3 刷新列表的时候,同时刷新当前打开的shadowRow,并且保持打开状态.
<br />
<br />
4 为ajax翻页 排序 刷新操作增加了 后置js回调。
<br />
可以通过指定
<br />
ecsdieObj.afterFillForm=函数名
<br />
作为回调，例如：
<br />
function testC(){
<br />
alert(123)
<br />
}
<br />
ecsdieObj.afterFillForm=testC;
<br />
<br />
则在执行ajax翻页 排序 刷新操作后，将调用alert(123).
<br />
该回调会传入 ajax的response对象.
<br />
<br />
<br />
5 代码做了细节调整，修正了一些缺陷和bug.
<br />
<br />
6 完善了示例，例如加入了 增加记录的演示，在action中提供了 数据库分页 和非数据库分页两种方法。
<br />
非数据库分页 请在  ec:table 内加入  retrieveRowsCallback="process" 属性
<br />
<br />
7 还有针对论坛中的很多朋友提出的建议和bug，做出了一些细节修改
<br />
在这里谢谢大家了。
<br />
<br />
<br />
<br />
即使不使用新特性，也强烈建议您升级，因为这一个月下来 1.1版还是暴露了很多的问题。
<br />
<br />
<br />
<br />
===============================
<br />
2007-02-13
<br />
ECSide 1.1 final 发布
<br />
===============================
<br />
1 展现层代码重写，页面内部的结构进行了调整。
<br />
2 表格内部滚动条的js全部重写,提高了性能,改善了对百分比宽度的支持。
<br />
3 ec:table增加属性 listWidth，用来指定列表实际宽度（可选项）
<br />
(width用来指定显示宽度)
<br />
增加属性 hieght用来指定列表显示高度
<br />
(之前的版本使用 listHeight，此次全部改为height,但是listHeight还会保留一段时间)
<br />
4 增加编组功能。&lt;ec:column group="hide"...
<br />
这个只是一个初步的实现，会在以后版本里加强。
<br />
5 新增加EasyDataExport特性。
<br />
该特性是EasyDataAccess的一个衍生物，也是通过配置来实现导出。
<br />
见OPOA的例子。
<br />
有一点要主义，它是在DAO层导出，这样可以支持较大的数据量。
<br />
6 完善了ECSideFilter过滤器 修正了导出下载时的一个小bug（bug虽小，耗时不少）。
<br />
7 一些代码调整和bug修改。
<br />
<br />
<br />
<br />
===============================
<br />
2007-02-07
<br />
ECSide 1.1 RC4 发布
<br />
===============================
<br />
1 新增加了一个 ec:mapping 标签，作用和ec:column的mappingItem类似，
<br />
但是可以脱离ectable单独使用。
<br />
2 完善了EcSideFilter过滤器。
<br />
3 重构了 easyList和 easyDataAccess相关代码
<br />
关于easyList和 easyDataAccess特性，
<br />
请参看Help_EasyDataAccess.txt以及easylist的教学录象还有示例。
<br />
4 一些细节的调整和bug的修改。
<br />
其中的一些bug还是比较严重(虽然出现几率很低)的，强烈建议更新。
<br />
在1.2版本之前，功能上基本不会有大变化了。
<br />
ECSide 1.1 final的主要改进也将集中在 bug修改 和 js、java代码重构上。
<br />
<br />
（详见 CHANGELOG.txt）
<br />
<br />
<br />
<br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br />
主要增强的功能：
<br />
1 可设置工具条位置（上 下 或 不显示）
<br />
2 可设置工具条内容（显示哪些 不显示哪些）
<br />
3 可设置工具条上各个功能按钮的相对位置
<br />
4 增加了调整页大小的选择框，并可自定义选择框内的内容
<br />
5 增加了带有邻近页面的导航条
<br />
6 增加了可跳转到指定页面的跳转框
<br />
7 增加了当前选中行高亮
<br />
8 为ec:table 增加了 excludeParameters 和 includeParameters 属性，可以实现更快捷简便的&#8220;参数保留/不保留&#8221;功能
<br />
9 可添加自定义的html代码到工具条内 或其他位置
<br />
10 可手动调整列宽，可通过js调整列表高度
<br />
11 增加了&#8220;列表内部滚动条&#8221;(实现列表头固定，列表体滚动的功能)
<br />
12 为ec:row和ec:column 添加更多的html事件支持，现支持：onmouserover onmouserout onclick ondbclick
<br />
13 为ec:table ec:row ec:column增加了自定义扩展属性功能
<br />
14 增加 ec:extendrow 标签，实现列表扩展行的功能
<br />
15 增加shadowRow(影子行)功能：每行下面可以再加一个子行 这个行里显示什么可以由大家自己定义
<br />
16 增加页面变量 ${TOTALROWCOUNT} 用来标示当前纪录在全部记录中的行数
<br />
17 增加了打印功能（尚不完善）
<br />
18 ec:column属性增加 ellipsis ,实现单元格内数据过长的时候 自动截短并加"..."的功能(ie only)
<br />
19 实现了跨列的列表头
<br />
20 统计栏的标题格可跨列
<br />
21 增加了若干种cell 和 headerCell,例如checkbox radiobox
<br />
22 取消了imagePath属性,样式相关的图片信息全部提入css内
<br />
23 重（第4声）用了js 和css ，很多功能用js来实现
<br />
24 支持了ajax翻页 (可设置 客户端 还是 服务端进行 html代码剪裁 )
<br />
25 支持预查询功能，在察看第n页的时候，把n+1页的数据也查询出来（隐藏着）备用，加快查看下一页的速度
<br />
26 将导出excel所使用的组件由poi切换成了 jxl
<br />
27 xls导出方式修改 原始的导出是导出的vo/map里的原始数值 现在是导出页面实际显示的内容
<br />
28 增加简捷导出方式 (通过ec:table的 xlsFileName pdfFileName csvFileName属性)
<br />
29 支持pdf简体中文导出。
<br />
30 代码进行了大规模的重构
<br />
31 增加了很多ajax相关特性
<br />
32 实现了可编辑列表功能
<br />
33 实现了cell的映射功能
<br />
34 easyList、easyDataAccess、easyDataExport特性：可通过简单的配制，快速实现列表数据的展现、查询、修改、删除、导出。
<br />
35 支持复杂表头的自定义与导出。
<br />
36 支持横向统计。
<br />
37 可以对列表内容进行灵活多样的escape。
<br />
<br />
<img src ="http://www.blogjava.net/botson/aggbug/187351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/botson/" target="_blank">Jam Chan</a> 2008-03-19 20:50 <a href="http://www.blogjava.net/botson/archive/2008/03/19/187351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>