﻿<?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-傻子一个-随笔分类-S2(F)SJ(H)JJ</title><link>http://www.blogjava.net/lifw/category/40345.html</link><description>一路走来~~</description><language>zh-cn</language><lastBuildDate>Tue, 29 Sep 2009 02:39:05 GMT</lastBuildDate><pubDate>Tue, 29 Sep 2009 02:39:05 GMT</pubDate><ttl>60</ttl><item><title>struts2.1.6 + freemarker2.3.15 访问 request  session 方法</title><link>http://www.blogjava.net/lifw/archive/2009/09/25/296445.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Fri, 25 Sep 2009 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/09/25/296445.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/296445.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/09/25/296445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/296445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/296445.html</trackback:ping><description><![CDATA[request：<br />
${request.getRequestURI()}<br />
<br />
session:<br />
${Session["SPRING_SECURITY_LAST_EXCEPTION"]}<br />
<br />
<img src ="http://www.blogjava.net/lifw/aggbug/296445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-09-25 16:33 <a href="http://www.blogjava.net/lifw/archive/2009/09/25/296445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jasperReport的一些参数</title><link>http://www.blogjava.net/lifw/archive/2009/08/04/289815.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Tue, 04 Aug 2009 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/08/04/289815.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/289815.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/08/04/289815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/289815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/289815.html</trackback:ping><description><![CDATA[参考自：http://hi.baidu.com/275989036/blog/item/a31feb33ee826a45ad4b5fb2.html
<br/ />
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 9pt;"><strong><span style="font-size: 18pt;">Exporter常用参数说明</span></strong> </span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>net.sf.jasperreports.engine.JRExporterParameter. JASPER_PRINT</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JasperPrint</span><span style="font-size: 9pt;">的对象，</span><span style="font-size: 9pt;">exporter</span><span style="font-size: 9pt;">在导出报表前会做检测</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter. JASPER_PRINT_LIST</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是包含了</span><span style="font-size: 9pt;">n</span><span style="font-size: 9pt;">个</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JasperPrint</span><span style="font-size: 9pt;">对象的</span><span style="font-size: 9pt;">java.util.List</span><span style="font-size: 9pt;">，</span><span style="font-size: 9pt;">exporter</span>在导出报表前会做检测 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.INPUT_STREAM</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JasperPrint</span><span style="font-size: 9pt;">被序列化对象的输入流，</span><span style="font-size: 9pt;">exporter</span>在导出报表前会做检测 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.INPUT_URL</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是包含</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JasperPrint</span><span style="font-size: 9pt;">被序列化对象的</span><span style="font-size: 9pt;">URL</span><span style="font-size: 9pt;">，</span><span style="font-size: 9pt;">exporter</span>在导出报表前会做检测 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.INPUT_FILE_NAME</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是存储了</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JasperPrint</span><span style="font-size: 9pt;">被序列化对象的文件路径，</span><span style="font-size: 9pt;">exporter</span>在导出报表前会做检测 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>注意：以上几个参数不能全部为空 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_STRING_BUFFER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.StringBuffer</span>的对象，存储已经产生出的指定格式报表的内容 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_WRITER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.io.Writer</span><span style="font-size: 9pt;">的对象，将指定格式报表的内容发送到一个字符流，例如</span><span style="font-size: 9pt;">Servlet</span><span style="font-size: 9pt;">的</span>PrintWriter </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_STREAM</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.io.OutputStream</span><span style="font-size: 9pt;">的对象，将指定格式报表的内容发送到一个输出流，例如</span>ServletOutputStream </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_FILE</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.io.FILE</span><span style="font-size: 9pt;">的对象，将指定格式报表的内容存储到文件里面</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>&#216;<font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_FILE_NAME</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span>的对象，将指定格式报表的内容存储到文件里面 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.CHARACTER_ENCODING</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span>的对象，指定格式报表的内容编码 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JExcelApiExporterParameter.IS_FONT_SIZE_FIX_ENABLED</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span><span style="font-size: 9pt;">的对象，是否允许自动修正</span><span style="font-size: 9pt;">Excel</span><span style="font-size: 9pt;">每个栏位的大小</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span><span style="font-size: 9pt;">的对象，每一页是否用一个</span>Sheet </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRXlsExporterParameter. IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span><span style="font-size: 9pt;">的对象，是否移除行与行之间的空行</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span>的对象，页面的背景是否为白的 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRXlsExporterParameter.SHEET_NAMES</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span><span style="font-size: 9pt;">的对象，</span><span style="font-size: 9pt;">Sheet</span>的名字 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRCsvExporterParameter.FIELD_DELIMITER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span>的对象，栏位之间的分隔符 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRCsvExporterParameter.RECORD_DELIMITER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span>的对象，栏位之间的分隔符 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span><span style="font-size: 9pt;">的对象，是否输出图片到目录</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_DIR_NAME</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span><span style="font-size: 9pt;">的对象，图片目录的绝对路径</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_DIR</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.io.File</span>的对象，图片目录 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_URI</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span><span style="font-size: 9pt;">的对象，通过</span><span style="font-size: 9pt;">Web</span><span style="font-size: 9pt;">访问时图片的</span><span style="font-size: 9pt;">URI</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -1cm; text-align: left;" align="left"><span style="font-size: 18pt;"><strong>2.5</strong></span><span style="font-size: 7pt;"><font face="Times New Roman"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <span style="font-size: 18pt;">JasperReport内置的常用参数说明</span></strong> </font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>这些参数是放到java.util.Map，在填充报表的时候使用</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>REPORT_CONNECTION</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.sql.Connection</span><span style="font-size: 9pt;">对象，在用</span><span style="font-size: 9pt;">Report Query</span>的时候调用 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>REPORT_DATASOURCE</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是实现了接口</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JRDataSource</span>的对象，在填充报表的时候调用 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>IS_IGNORE_PAGINATION</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span>对象，报表是否忽略分页 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>REPORT_MAX_COUNT</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Integer</span>对象，报表显示的最大记录数 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>DRAWING_SUPPLIER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是实现了接口</span><span style="font-size: 9pt;">org.jfree.chart.plot.DrawingSupplier</span><span style="font-size: 9pt;">对象，定义自己的填充色</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数不是原来</span><span style="font-size: 9pt;">JasperReport</span><span style="font-size: 9pt;">定义的，是后来加上的</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -1cm; text-align: left;" align="left"><span style="font-size: 18pt;"><strong>2.6</strong></span><strong><span style="font-size: 7pt;"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font></span><span style="font-size: 18pt;">JasperReport内置的常用变量说明 </span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>PAGE_NUMBER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><span style="font-size: 9pt;"><strong>当前页面的页码，即第几页</strong></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>REPORT_COUNT</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong>整个报表填充完成后，总的记录数 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><span style="font-size: 7pt;"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font></span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>COLUMN_COUNT</strong></p>
<strong><span style="font-size: 9pt;">当前记录的行数，每个页面的计数会复位后重新计算。</span></strong>

<img src ="http://www.blogjava.net/lifw/aggbug/289815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-08-04 17:27 <a href="http://www.blogjava.net/lifw/archive/2009/08/04/289815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jasperReport+ireport 设计中文乱码问题</title><link>http://www.blogjava.net/lifw/archive/2009/08/03/289556.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Mon, 03 Aug 2009 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/08/03/289556.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/289556.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/08/03/289556.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/289556.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/289556.html</trackback:ping><description><![CDATA[需要iTextAsian.jar<br />
PDF font name: STSong-Light;<br />
PDF embedeed encoding前的勾选上<br />
pdfEncoding ：UniGB-UCS2-V (Chinese Simplified)
<img src ="http://www.blogjava.net/lifw/aggbug/289556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-08-03 11:34 <a href="http://www.blogjava.net/lifw/archive/2009/08/03/289556.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2下freemarker访问静态方法和静态变量 </title><link>http://www.blogjava.net/lifw/archive/2009/07/25/288298.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Sat, 25 Jul 2009 00:55:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/07/25/288298.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/288298.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/07/25/288298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/288298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/288298.html</trackback:ping><description><![CDATA[<div>摘自：http://blog.csdn.net/lovelyxiaoyu/archive/2009/05/15/4189011.aspx</div>
<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;">${stack.findValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">@package.ClassName@method</span><span style="color: #000000;">"</span><span style="color: #000000;">)}<br />
${stack.findValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">@package.ClassName@property</span><span style="color: #000000;">"</span><span style="color: #000000;">)}<br />
因为&nbsp;stack&nbsp;是webwork结合&nbsp;freemarker&nbsp;后在&nbsp;ftl&nbsp;中可以用的，其他的还有&nbsp;${base}等等</span></div>

<img src ="http://www.blogjava.net/lifw/aggbug/288298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-07-25 08:55 <a href="http://www.blogjava.net/lifw/archive/2009/07/25/288298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2的Result Type</title><link>http://www.blogjava.net/lifw/archive/2009/06/18/283008.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Thu, 18 Jun 2009 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/06/18/283008.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/283008.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/06/18/283008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/283008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/283008.html</trackback:ping><description><![CDATA[转自：http://savefrom.javaeye.com/blog/305413
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">.&nbsp;chain&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用来处理Action链&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.opensymphony.xwork2.ActionChainResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">6</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">7</span><span style="color: rgb(0, 0, 0);">.&nbsp;dispatcher&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">8</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">9</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用来转向页面，通常处理JSP&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">11</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.ServletDispatcherResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">12</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">13</span><span style="color: rgb(0, 0, 0);">.&nbsp;freemaker&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">14</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">15</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;处理FreeMarker模板&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">16</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">17</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.views.freemarker.FreemarkerResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">18</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">19</span><span style="color: rgb(0, 0, 0);">.&nbsp;httpheader&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">20</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">21</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;控制特殊HTTP行为的结果类型&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">22</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">23</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.HttpHeaderResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">24</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">25</span><span style="color: rgb(0, 0, 0);">.&nbsp;redirect&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">26</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">27</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重定向到一个URL&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">28</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">29</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.ServletRedirectResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">30</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">31</span><span style="color: rgb(0, 0, 0);">.&nbsp;redirectAction&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">32</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">33</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重定向到一个Action&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">34</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">35</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.ServletActionRedirectResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">36</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">37</span><span style="color: rgb(0, 0, 0);">.&nbsp;stream&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">38</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">39</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;向浏览器发送InputSream对象，通常用来处理文件下载，还可用于返回AJAX数据&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">40</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">41</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.StreamResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">42</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">43</span><span style="color: rgb(0, 0, 0);">.&nbsp;velocity&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">44</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">45</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;处理Velocity模板&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">46</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">47</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.VelocityResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">48</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">49</span><span style="color: rgb(0, 0, 0);">.&nbsp;xslt&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">50</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">51</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;处理XML</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">XLST模板&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">52</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">53</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.views.xslt.XSLTResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">54</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">55</span><span style="color: rgb(0, 0, 0);">.&nbsp;plainText&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">56</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">57</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;显示原始文件内容，例如文件源代码&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">58</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">59</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.PlainTextResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">60</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">61</span><span style="color: rgb(0, 0, 0);">.&nbsp;redirect</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">action&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">62</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">63</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重定向到一个Action&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">64</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">65</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.ServletActionRedirectResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">66</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">67</span><span style="color: rgb(0, 0, 0);">.&nbsp;plaintext&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">68</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">69</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;显示原始文件内容，例如文件源代码&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">70</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">71</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.PlainTextResult&nbsp; <br />
</span></div>
<img src ="http://www.blogjava.net/lifw/aggbug/283008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-06-18 11:15 <a href="http://www.blogjava.net/lifw/archive/2009/06/18/283008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Strtus2 Convention Plugin </title><link>http://www.blogjava.net/lifw/archive/2009/06/17/282840.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Wed, 17 Jun 2009 05:49:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/06/17/282840.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/282840.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/06/17/282840.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/282840.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/282840.html</trackback:ping><description><![CDATA[<br />
转载自：http://blog.163.com/lennon.wang/blog/static/2135606200942215038914/<br />
<br />
<br />
<span style="font-size: small;">1.官方介绍的地址： <br />
<br />
<a href="http://struts.apache.org/2.1.6/docs/convention-plugin.html" target="_blank">http://struts.apache.org/2.1.6/docs/convention-plugin.html</a>
<br />
<br />
<br />
2.struts.xml文件配置 <br />
<br />
只挑选几个重要的常量说明： <br />
<br />
(1) &lt;constant
name="struts.locale" value="zh_CN"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.i18n.encoding" value="UTF-8"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
struts2.1.6&nbsp;
现在只需要一个struts.xml文件就可以了。以前配struts.locale=zh_CN，struts.i18n.encoding＝UTF-
8，应用起动时会报一个警告，说没有配置locale，必须要在struts.properties里面配置才不会报错，现在这个问题已经解决了，所有配
置都可以在xml文件中指定了。 <br />
<br />
<br />
(2) &lt;constant name="struts.action.extension"
value="action,do,,"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
扩展名可以指定为空。这样地址栏比较好看。但也会有个问题，就是一些其他servlet映射，如cxf，我们会映射地址为/services/*，现在这
个地址也变成struts2控制范围的地址了，如果按默认的配置会报找不到action的错误。解决办法是修改mapper类。这在以后文章中会提到。
<br />
<br />
<br />
(3)&nbsp; &lt;constant name="struts.enable.DynamicMethodInvocation"
value="true"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.enable.SlashesInActionNames" value="true"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
开启动态方法。要实现零配置，就是需要动态方法调用。开启action名称可以有
&#8220;/&#8221;，一个请求地址有多个&#8220;/&#8221;，struts2就不会再使用类路径扫描的命名空间，只会使用配置的名称。所以既想action名称里使用&#8220;/&#8221;，又想用struts2默认搜索的命名空间，只能自己修改一下convention插件的实现类了。
<br />
<br />
<br />
(4) &lt;constant name="struts.ui.theme" value="simple"/&gt;
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不用dojo的及struts2复杂标签样式的就把主题设置为simple，这样可以不加载多余的模板。 <br />
<br />
<br />
(5)
&lt;constant name="struts.devMode" value="true"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.i18n.reload" value="true"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.configuration.xml.reload" value="true"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.convention.classes.reload" value="true" /&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
开启开发者模式，在平时开发时修改action的annotation配置可以不重启，但是修改struts.xml文件还是要重启。修改类的具体内容，debug模式下可以不重启，或是使用javarebel，这个不在讨论范围。
<br />
<br />
<br />
(6)&nbsp; &lt;constant name="struts.convention.result.path"
value="/WEB-INF/pages/"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定结果页面路径。
convention插件会自动在此路径中寻找文件。放到WEB-INF的目的的保护文件资源，只能通过程序内部跳转才能访问，我们的权限拦截器或其他权限处理只要加到action上就可以了。
<br />
<br />
<br />
(7) &lt;constant name="struts.convention.action.suffix"
value="Action"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.convention.action.name.lowercase" value="true"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;
&lt;constant name="struts.convention.action.name.separator" value="_"/&gt;
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 一个action名字的获取。比如为HelloWorldAction。按照配置，actionName为hello_world。
<br />
<br />
<br />
(8)&lt;constant name="struts.convention.action.disableScanning"
value="false"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 是否不扫描类。一定要设为false，否则convention插件不起作用，零配置也没有意义。
<br />
<br />
<br />
(9)&lt;constant name="struts.convention.default.parent.package"
value="default"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;
设置默认的父包，一般我们都设置一个default包继承自struts-default。大部分类再继承default。如果有特殊的类需要特殊的包，只能在action中再指定父包了。
<br />
<br />
<br />
(10) &lt;constant name="struts.convention.package.locators"
value="action"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.convention.package.locators.disable" value="false"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;constant name="struts.convention.package.locators.basePackage" value=""/&gt;
<br />
<br />
确定搜索包的路径。只要是结尾为action的包都要搜索。basePackage按照默认不用配置，如果配置，只会找以此配置开头的包。locators及locators.basePackage都是一组以逗号分割的字符串。
<br />
<br />
<br />
(11)&nbsp; &lt;constant
name="struts.convention.exclude.packages"
value="org.apache.struts.*,org.apache.struts2.*,org.springframework.web.struts.*,org.springframework.web.struts2.*,org.hibernate."/&gt;
<br />
<br />
排除哪些包不搜索。按默认配置即可。逗号分割字符串。 <br />
<br />
<br />
(12)&nbsp; &lt;constant
name="struts.convention.action.includeJars" value="" /&gt;
<br />
<br />
包括哪些jar包中的action。逗号分割字符串。 <br />
<br />
<br />
(13)&lt;constant
name="struts.convention.relative.result.types"
value="dispatcher,freemarker,velocity"/&gt;
<br />
<br />
默认返回的结果类型搜索。按顺序先找相关的dispatcher的jsp文件是否存在。然后再找freemarker，再找velocity。
<br />
<br />
<br />
(14)&lt;constant name="struts.convention.result.flatLayout"
value="true"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
如果此值设为true，如果一个action的命名空间为/login，名称为HelloWorldAction。result返回值是success，
默认会找到/WEB-INF/pages/login/hello_world.jsp（如果有hello_world_success.jsp就找这个
文件，连接符&#8220;_&#8221;是在&lt;constant name="struts.convention.action.name.separator"
value="_"/&gt;中配置的）。如果有一个action的result返回值是&#8220;error&#8221;，就会找/WEB-INF/pages
/login/hello_world_error.jsp。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
如果此值设为false，如果一个action的命名空间为/login，名称为HelloWorldAction。result返回值是success，默认会找到/WEB-
INF/pages/login/hello_world/index.jsp（如果有success.jsp就找这个文件）。如果有一个action的result返回值是&#8220;error&#8221;，就会找/WEB-INF/pages
/login/hello_world/error.jsp。 <br />
<br />
<br />
(15) &lt;constant
name="struts.convention.action.mapAllMatches" value="false"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;constant name="struts.convention.action.checkImplementsAction"
value="false"/&gt; <br />
&nbsp;&nbsp; &lt;constant
name="struts.mapper.alwaysSelectFullNamespace" value="false"/&gt; <br />
&nbsp;&nbsp;
&lt;constant name="struts.convention.redirect.to.slash" value="true"/&gt;
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这几个配置没有太多的实际意义，本着最小检查的原则就可以。
<br />
<br />
<br />
(16)默认拦截器配置，已经简化了许多，一般不需要chain和
fileupload。modelDriven也没什么用，如果我们要使用restfull插件会有用。其实最简单只要一个params就可以了。我加入
exception是为了开发时的异常。servletConfig是为了包装一下request,reponse等对象，staticParams是为
了可以配置${}形式参数。actionMappingParams是struts2.1新增的，我初步认为是可以在action配置中传参数，这个还有
些疑问。</span>
<br />
<br />
<br />
<span style="font-size: small;">1.action配置 <br />
<br />
&nbsp;&nbsp;
按照第一篇中的配置，设置locator为action，则默认一个类的命名空间为： <br />
<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;&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;&nbsp;&nbsp; 命名空间
<br />
com.example.action.MainAction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp;&nbsp; /
<br />
com.example.action.products.Display -&gt;&nbsp;&nbsp;&nbsp; /products <br />
<br />
&nbsp;&nbsp;&nbsp; 完整url为：
<br />
<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;&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
完整url <br />
com.example.action.MainAction&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&gt; /main
<br />
com.example.action.products.Display&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;&nbsp;&nbsp; -&gt;
/products/display <br />
com.example.action.company.ShowCompanyDetailsAction -&gt;
/company/details/show_company_details <br />
<br />
<br />
<br />
3.action类写法 <br />
&nbsp;&nbsp;&nbsp;
如果要实现基本零配置，命名空间和action名称按照默认的类路径搜索。默认执行方法是execute。方法返回值是success，就会找。</span>
<br />
<br />
<div>
<div>
<div>Java代码 <a title="复制代码" href="http://corradignw.javaeye.com/blog/353600#"><img title="Strtus2 Convention Plugin  - 王佳 - 王佳的blog" alt="复制代码" src="http://corradignw.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol>
    <li><span>package<span>&nbsp;com.example.action;
    &nbsp;&nbsp;</span></span></li>
    <li>&nbsp;&nbsp;</li>
    <li>import<span>&nbsp;com.opensymphony.xwork2.ActionSupport;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;</li>
    <li>public&nbsp;class&nbsp;HelloWorld&nbsp;extends&nbsp;ActionSupport&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private<span>&nbsp;String&nbsp;message;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getMessage()&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;message;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;execute()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;excute"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;SUCCESS;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;edit()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;edit"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"xyz"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;delete()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;delete"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"depp"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;">package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
private String message;
public String getMessage() {
return message;
}
public String execute() {
message = "Hello World! excute";
return SUCCESS;
}
public String edit() {
message = "Hello World! edit";
return "xyz";
}
public String delete() {
message = "Hello World! delete";
return "depp";
}
}</pre>
<br />
<br />
<span style="font-size: small;"><br />
&nbsp;&nbsp;&nbsp; 返回结果对应：
<br />
<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
实际url(WEB-INF/pages) <br />
/hello_world&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/hello_world.jsp或/hello_world_success.jsp
<br />
/hello_world!edit&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;&nbsp;&nbsp; /hello_world_xyz.jsp
<br />
/hello_world!delete&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; /hello_world_depp.jsp
<br />
<br />
&nbsp;&nbsp;&nbsp; 基本的零配置就是这样，如果要有redirect、chain等跳转方式，interceptor的配置，就要加入annotation。
<br />
<br />
<br />
2.action类中的annotation
<br />
<br />
convention插件的annotation都在annotation这个包中，基本和xml配置相对应。 <br />
<br />
&nbsp;&nbsp;&nbsp;
annotation&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;&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;&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; 作用域
<br />
ParentPackage&nbsp;&nbsp;
指定继承的包(struts2)名&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包，类
<br />
Namespaces&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给一个action指定多个命名空间(一般不用)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包，类
<br />
Namespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定一个命名空间(一般不用，按默认的类路径即可)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包，类，Namespaces注解中
<br />
actions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
给一个action指定多个名称&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法
<br />
action&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
指定一个action名称&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;&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;
类，方法，actions注解中 <br />
InterceptorRefs 一组拦截器集合(只能是名称，必须先在xml文件中配置好)&nbsp; 类，action注解中&nbsp;
<br />
InterceptorRef&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
类，InterceptorRefs注解中 <br />
ResultPath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
结果映射的路径(已经在struts.xml文件中指定)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包，类 <br />
Results&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类，action注解中
<br />
Result&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
类，Results注解中 <br />
<br />
&nbsp;&nbsp;&nbsp; 需要注意：
<br />
<br />
1）包(java)级别是在package-info.java这个文件中配置，可以配置整个包的定义，但是命名空间就不能按默认的类路径扫描了，必须也要显式的配置。所以这个文件最好不要使用。
<br />
<br />
2）不在包(java)级别配置就要在类(java)级别配置，可能每个类都要写一句ParentPackage，指定继承的包(struts2)，以获得父包中的拦截器配置及其他公用配置。如果没有特殊的拦截器配置则不用配置ParentPackage。
<br />
<br />
3）最好把annotation配到类级别，因为这样action名称及命名空间都可用默认的类路径扫描，不用我们显式的配置。只要配置
特殊的result和拦截器即可。类中的其他方法使用动态方法调用的方式使用同一个配置。我们知道struts2所有配置都是启动加载到map中的，减少
配置，会提高一定性能。而动态方法这种模式是零配置必不可少的，但我很不喜欢叹号出现在地址栏中，所以在后面的文章中我会结合restful插件及自己修
改源代码实现意义上的动态方法调用，但形式上是别的方式，地址栏会比较美观。</span>
<br />
<div>
<div>
<div>Java代码 <a title="复制代码" href="http://corradignw.javaeye.com/blog/353600#"><img title="Strtus2 Convention Plugin  - 王佳 - 王佳的blog" alt="复制代码" src="http://corradignw.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol>
    <li><span>package<span>&nbsp;com.example.action;
    &nbsp;&nbsp;</span></span></li>
    <li>&nbsp;&nbsp;</li>
    <li>import<span>&nbsp;com.opensymphony.xwork2.ActionSupport;
    &nbsp;&nbsp;</span></li>
    <li>import<span>&nbsp;org.apache.struts2.convention.annotation.Result;
    &nbsp;&nbsp;</span></li>
    <li>import<span>&nbsp;org.apache.struts2.convention.annotation.Results;
    &nbsp;&nbsp;</span></li>
    <li>import<span>&nbsp;org.apache.struts2.convention.annotation.InterceptorRef;
    &nbsp;&nbsp;</span></li>
    <li>import<span>&nbsp;org.apache.struts2.convention.annotation.InterceptorRefs;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;</li>
    <li>@InterceptorRefs<span>({
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@InterceptorRef("interceptor-1"), &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@InterceptorRef("defaultStack") &nbsp;&nbsp;</li>
    <li>}) &nbsp;&nbsp;</li>
    <li>@Results<span>({
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@Result(name="reload",location="hello_world",type="redirectAction"<span>,params={key1,value1,key2,value2}),
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@Result(name="chainact",location="hello_world!edit",type="chain") &nbsp;&nbsp;</li>
    <li>}) &nbsp;&nbsp;</li>
    <li>public&nbsp;class&nbsp;HelloWorld&nbsp;extends&nbsp;MyBaseAction&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private<span>&nbsp;String&nbsp;message;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getMessage()&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;message;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;execute()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;excute"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;SUCCESS;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;edit()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;edit"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;RELOAD;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;delete()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;delete"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;CHAINACT;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;">package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
@InterceptorRefs({
@InterceptorRef("interceptor-1"),
@InterceptorRef("defaultStack")
})
@Results({
@Result(name="reload",location="hello_world",type="redirectAction",params={key1,value1,key2,value2}),
@Result(name="chainact",location="hello_world!edit",type="chain")
})
public class HelloWorld extends MyBaseAction {
private String message;
public String getMessage() {
return message;
}
public String execute() {
message = "Hello World! excute";
return SUCCESS;
}
public String edit() {
message = "Hello World! edit";
return RELOAD;
}
public String delete() {
message = "Hello World! delete";
return CHAINACT;
}
}
</pre>
<br />
<span style="font-size: small;"><br />
4）如果有极其特殊的情况需要为action的每个方法
单独配置，这时就不能用默认的类扫描了，必须是先配置action，指定名称，再在action中配置result和interceptor。这就会使配
置增多，违背的零配置的初衷。有时我们为了性能原因想把拦截器细化到具体的action上，我想如果真是这样，我们还不如再写一个action类。还有
struts2.1.6原有的配置是如果action名称中有&#8220;/&#8221;，会认为这是一个命名空间，不会再按照类扫描的默认值。例如：</span>
<br />
<div>
<div>
<div>Java代码 <a title="复制代码" href="http://corradignw.javaeye.com/blog/353600#"><img title="Strtus2 Convention Plugin  - 王佳 - 王佳的blog" alt="复制代码" src="http://corradignw.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol>
    <li><span>package<span>&nbsp;com.example.action;
    &nbsp;&nbsp;</span></span></li>
    <li>&nbsp;&nbsp;</li>
    <li>import<span>&nbsp;com.opensymphony.xwork2.ActionSupport;
    &nbsp;&nbsp;</span></li>
    <li>import<span>&nbsp;org.apache.struts2.convention.annotation.Action;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;</li>
    <li>public&nbsp;class&nbsp;HelloWorld&nbsp;extends&nbsp;ActionSupport&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@Action("/different/url") &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;execute()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;SUCCESS;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@Action("url") &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;doSomething()&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;SUCCESS;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;">package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
public class HelloWorld extends ActionSupport {
@Action("/different/url")
public String execute() {
return SUCCESS;
}
@Action("url")
public String doSomething() {
return SUCCESS;
}
}
</pre>
<br />
<span style="font-size: small;"><br />
&nbsp;&nbsp;&nbsp; 调用方法execute的url为 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/different/url (命名空间已经更换) <br />
&nbsp;&nbsp;&nbsp; 调用方法doSomething的url为 :&nbsp;&nbsp; /url
<br />
<br />
5）比较别扭的地方就是拦截器的配置，必须用名称，而名称和实际拦截器类的对应关系是在struts.xml文件中声明的，如果用
struts2以前的annotation是可以直接配置拦截器类的，但是我没有和convention插件结合使用，这个问题我正在研究，看看有没有好
的办法。 <br />
<br />
6）还有一种默认的chain跳转，实际是在struts2.1.6中新增的unknownHandleder中设定的，没有什么太大作用，我们可以不使用。而unknownHandleder我们可以自定义为其他，这在后面的文章中会有说明。
<br />
<br />
<br />
</span><span style="font-size: small;">1.Convention插件的主要实现浅析
<br />
<br />
1.1&nbsp; PackageBasedActionConfigBuilder 这个类最重要，是整个程序的入口。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;
1.1.1&nbsp;
buildActionConfigs方法进行初始化配置，其中findActions扫描类路径，我没有深入研究这个方法具体是怎么找到所有类的。只是
找到全部类后，和我们的配置文件中限定的范围匹配、过滤，存入一个set中。然后buildConfiguration(set)循环分析这些类。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1.1.2&nbsp;
buildConfiguration方法，首先创建一个map类型的packageConfigs。键为包（struts2）名，值为PackageConfig.Builder对象，这个对象可以创建PackageConfig对象。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后循环找到的类，分析包名（java），determineActionNamespace方法分析命名空间，得到一个list对象。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 再循环所有命名空间，determineActionName方法分析类名称、类的默认方法（这个是写死在程序中的，就是execute方法）。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getPackageConfig方法分析得到PackageConfig.Builder对象。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
getActionAnnotations方法分析得到action类方法的annotation配置。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
循环每个方法的配置，调用createActionConfig方法分析，把
results，interceptors，exceptionMappings等配置放入ActionConfig.Builder对象，再把
ActionConfig对象（由ActionConfig.Builder生成）放入PackageConfig.Builder中。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buildIndexActions创建默认索引action。这个好像用处不大。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
最后把PackageConfig对象放入Configuration对象中，这是最顶级的配置。我们在任何时间和地点都可以得到Configuration对象，并对其进行分析。
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1.1.3&nbsp;&nbsp;
determineActionNamespace方法是确定一个action类在web应用中的命名空间，先找这个类的Namespace注解，找到后
放入一个存储命名空间的list。再找Namespaces注解，一个action可以有多个命名空间。如果有注解则按照注解来确定一个action的命
名空间，如果没有，则分析这个action所在包（java）的路径，按照struts2.xml中配置的规则来确定。这个规则就是截取到定义的
locator，在这个locator之后的包（java）全部作为命名空间，类名作为action名称。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1.1.4&nbsp;&nbsp;
determineActionName方法是确定一个action类在web应用中的名称。由ActionNameBuilder（接口）的方法来实
现，这个接口的具体实现类，插件默认为SEOActionNameBuilder。被称为搜索引擎友好的名称。会把action类的name按单词分解，
然后用连接符连起来。默认连接符是"-"，我们可以设置为"_"。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1.1.5&nbsp;&nbsp;
getPackageConfig方法是确定一个action类在web应用中的继承的包（struts2）。先找这个类的ParentPackage注
解，如果有注解则按照注解来确定一个action的父包（struts2），如果没有，按照struts.xml中配置的规则来确定。这个规则就是
defaultParentPackage。得到父包（struts2）后要拼成： actionPackage + "#" +
parentPkg.getName() + "#" + actionNamespace 的形式，这是xwork里的规定。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1.1.6&nbsp;&nbsp;
getActionAnnotations方法是确定一个action类的方法上的annotation配置。先找方法的Actions注解，一个方法可
以有多个action映射。再找Action注解，放入一个map中，键是方法名，值是存储一组acton映射的list对象。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.1.7&nbsp;&nbsp;
createActionConfig方法构造ActionConfig.Builder对象，逐一判断
interceptors，results，exceptionMappings，都是从类一级开始判断是否有此注解，再从方法的action注解中寻
找。InterceptorMapBuilder，ResultMapBuilder是两个接口，提供通过注解构造Interceptor和Result
的方法，插件分别提供了默认的实现DefaultInterceptorMapBuilder和DefaultResultMapBuilder。而
buildExceptionMappings只是本类中的一个方法。 <br />
<br />
1.2&nbsp; DefaultInterceptorMapBuilder <br />
&nbsp;&nbsp;&nbsp;&nbsp;
先找action类是否存在InterceptorRefs注解，再看是否存在InterceptorRef注解，再看action注解中是否定义了InterceptorRefs。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;
还用到了StringTools的createParameterMap方法把注解中的params（形式为{key1,value1,key2,value2,......}）转化成一个map。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
buildInterceptorList方法利用了xwork中的InterceptorBuilder的一个静态方法constructInterceptorReference把拦截器注入到配置中。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
而一个action所继承的父包中的拦截器，或是默认拦截器，并不在这个类中构造。而是由xwork根据包（struts2）的继承关系加载（actionPackage
+ "#" + parentPkg.getName() + "#" + actionNamespace
这是xwork里规定的形式，已经由PackageBasedActionConfigBuilder 配置）。 <br />
<br />
1.3
DefaultResultMapBuilder <br />
&nbsp;&nbsp;&nbsp;
1.3.1&nbsp;
build方法，确定defaultResultPath，构造包含ResultConfig的map对象，再通过扩展名获得一个包含
ResultTypeConfig的map对象。createFromResources方法获得默认返回结果页面，然后查找action注解中的
results配置，再找类级别的Results注解，再找类级别的Result注解，相同的肯定会覆盖。createFromAnnotations。
<br />
<br />
&nbsp;&nbsp;&nbsp; 1.3.2&nbsp;
createFromResources方法中使用servletContext.getResourcePaths方法寻找页面。如果
struts.xml中配置flatLayout为true则直接找到以命名空间为名称的文件夹，在此文件夹中寻找页面，如果flatLayout为
false，则会找到以命名空间为名称的文件夹，再找到此文件夹中的以action名称命名的子文件夹，在这个文件夹中寻找页面。 <br />
<br />
&nbsp;&nbsp;&nbsp; 1.3.3&nbsp;
makeResults方法找默认的返回页面，如果没有路径没有包含resultcode（定义的字符串）的页面，则按默认顺序寻找
success，input，error。比如hello_world.jsp文件（flatLayout为true，连接符为"_"），如果没有
hello_world_success.jsp，hello_world_input.jsp，hello_world_error.jsp文件，同
时"success"，"input"，"error"，又没有显式的配置，只是作为结果字符串返回，则程序默认会用hello_world.jsp来匹
配三种结果。如果结果字符串resultcode是"edit"，同时又没有显式的配置，则必会找hello_world_edit.jsp。 <br />
<br />
&nbsp;&nbsp;&nbsp; 1.3.4&nbsp; createFromAnnotations这个方法就是把注解转换成ResultConfig配置。 <br />
<br />
1.4
ConventionsServiceImpl <br />
&nbsp;&nbsp;&nbsp;
是result配置的辅助类。determineResultPath方法先判断struts.xml文件中的配置，再判断action类的注解中是否有ResultPath，如果有将覆盖struts.xml中配置。
<br />
&nbsp;&nbsp;&nbsp;&nbsp; getResultTypesByExtension方法提供一个map对象，默认的result结果返回。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
其实通过看这些方法，我们也基本了解了struts2的整个配置过程，非常繁琐，很多的判断确实很耗费资源，使用xml配置也一样。我们也知道所有配置信息都是应用启动时加载，存入map中常驻内存。所以我们应该尽可能减少配置，多使用动态方法调用。
<br />
<br />
1.5&nbsp; ConventionUnknownHandler
是UnknownHandler接口的一个实现，用来处理找不到相应配置的情况。在struts2.1的dtd中新增了一个&lt;unknown-handler-stack&gt;元素，可以配置一组handler。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handleUnknownAction方法处理找不到action的情况。这个我感觉用处不大。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
handleUnknownResult方法处理找不到result的情况。这个方法可以有很多扩展。比如我想定义一种返回值形式：redirect-&gt;xxx.do?ad=12或chain-&gt;xxx.do。用这种形式比写注解要方便的多。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handleUnknownActionMethod方法处理找不到action中方法的情况。这个默认没有实现。</span>
<img src ="http://www.blogjava.net/lifw/aggbug/282840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-06-17 13:49 <a href="http://www.blogjava.net/lifw/archive/2009/06/17/282840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>