??xml version="1.0" encoding="utf-8" standalone="yes"?>国产aⅴ精品一区二区四区,久久综合久久综合久久,午夜精品亚洲一区二区三区嫩草 http://www.aygfsteel.com/lifw/category/40345.html一路走来~~zh-cnTue, 29 Sep 2009 02:39:05 GMTTue, 29 Sep 2009 02:39:05 GMT60struts2.1.6 + freemarker2.3.15 讉K request session Ҏ(gu)http://www.aygfsteel.com/lifw/archive/2009/09/25/296445.html老文老文Fri, 25 Sep 2009 08:33:00 GMThttp://www.aygfsteel.com/lifw/archive/2009/09/25/296445.htmlhttp://www.aygfsteel.com/lifw/comments/296445.htmlhttp://www.aygfsteel.com/lifw/archive/2009/09/25/296445.html#Feedback0http://www.aygfsteel.com/lifw/comments/commentRss/296445.htmlhttp://www.aygfsteel.com/lifw/services/trackbacks/296445.html ${request.getRequestURI()}

session:
${Session["SPRING_SECURITY_LAST_EXCEPTION"]}



老文 2009-09-25 16:33 发表评论
]]>
jasperReport的一些参?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/lifw/archive/2009/08/04/289815.html</guid><wfw:comment>http://www.aygfsteel.com/lifw/comments/289815.html</wfw:comment><comments>http://www.aygfsteel.com/lifw/archive/2009/08/04/289815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lifw/comments/commentRss/289815.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lifw/services/trackbacks/289815.html</trackback:ping><description><![CDATA[参考自Qhttp://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;">q个参数?/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;">在导出报表前?x)做?/span></strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </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;">q个参数是包含了</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;">Q?/span><span style="font-size: 9pt;">exporter</span>在导出报表前?x)做?</strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </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;">q个参数?/span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JasperPrint</span><span style="font-size: 9pt;">被序列化对象的输入流Q?/span><span style="font-size: 9pt;">exporter</span>在导出报表前?x)做?</strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </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;">q个参数是包?/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;">Q?/span><span style="font-size: 9pt;">exporter</span>在导出报表前?x)做?</strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </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;">q个参数是存储了</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>在导出报表前?x)做?</strong></p> <p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>注意Q以上几个参C能全部ؓ(f)I?</strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/span><span style="font-size: 9pt;">java.io.Writer</span><span style="font-size: 9pt;">的对象,指定格式报表的内容发送到一个字W流Q例?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/span><span style="font-size: 9pt;">java.io.OutputStream</span><span style="font-size: 9pt;">的对象,指定格式报表的内容发送到一个输出流Q例?/span>ServletOutputStream </strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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>Ø<font face="Times New Roman">         </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;">q个参数?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/span><span style="font-size: 9pt;">java.lang.Boolean</span><span style="font-size: 9pt;">的对象,是否U除行与行之间的I</span></strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </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;">q个参数?/span><span style="font-size: 9pt;">java.lang.Boolean</span>的对象,面的背景是否ؓ(f)白的 </strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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;">Ø</span><font face="Times New Roman">         </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;">q个参数?/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;">讉K时图片的</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>      <span style="font-size: 18pt;">JasperReport内置的常用参数说?/span></strong> </font></span></p> <p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>q些参数是放到java.util.MapQ在填充报表的时候?/strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </font>REPORT_CONNECTION</strong></p> <p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">q个参数?/span><span style="font-size: 9pt;">java.sql.Connection</span><span style="font-size: 9pt;">对象Q在?/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;">Ø</span><font face="Times New Roman">         </font>REPORT_DATASOURCE</strong></p> <p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">q个参数是实C接口</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;">Ø</span><font face="Times New Roman">         </font>IS_IGNORE_PAGINATION</strong></p> <p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">q个参数?/span><span style="font-size: 9pt;">java.lang.Boolean</span>对象Q报表是否忽略分?</strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </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;">q个参数?/span><span style="font-size: 9pt;">java.lang.Integer</span>对象Q报表显C的最大记录数 </strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </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;">q个参数是实C接口</span><span style="font-size: 9pt;">org.jfree.chart.plot.DrawingSupplier</span><span style="font-size: 9pt;">对象Q定义自q填充?/span></strong></p> <p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">q个参数不是原来</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">      </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;">Ø</span><font face="Times New Roman">         </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;">Ø</span><font face="Times New Roman">         </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;">Ø</span><span style="font-size: 7pt;"><font face="Times New Roman">         </font></span></strong></p> <p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">Ø</span><font face="Times New Roman">         </font>COLUMN_COUNT</strong></p> <strong><span style="font-size: 9pt;">当前记录的行敎ͼ每个面的计C(x)复位后重新计?/span></strong> <img src ="http://www.aygfsteel.com/lifw/aggbug/289815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lifw/" target="_blank">老文</a> 2009-08-04 17:27 <a href="http://www.aygfsteel.com/lifw/archive/2009/08/04/289815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jasperReport+ireport 设计中文q问题http://www.aygfsteel.com/lifw/archive/2009/08/03/289556.html老文老文Mon, 03 Aug 2009 03:34:00 GMThttp://www.aygfsteel.com/lifw/archive/2009/08/03/289556.htmlhttp://www.aygfsteel.com/lifw/comments/289556.htmlhttp://www.aygfsteel.com/lifw/archive/2009/08/03/289556.html#Feedback0http://www.aygfsteel.com/lifw/comments/commentRss/289556.htmlhttp://www.aygfsteel.com/lifw/services/trackbacks/289556.html PDF font name: STSong-Light;
PDF embedeed encoding前的N上
pdfEncoding QUniGB-UCS2-V (Chinese Simplified)

老文 2009-08-03 11:34 发表评论
]]>
struts2下freemarker讉K静态方法和静态变?http://www.aygfsteel.com/lifw/archive/2009/07/25/288298.html老文老文Sat, 25 Jul 2009 00:55:00 GMThttp://www.aygfsteel.com/lifw/archive/2009/07/25/288298.htmlhttp://www.aygfsteel.com/lifw/comments/288298.htmlhttp://www.aygfsteel.com/lifw/archive/2009/07/25/288298.html#Feedback0http://www.aygfsteel.com/lifw/comments/commentRss/288298.htmlhttp://www.aygfsteel.com/lifw/services/trackbacks/288298.html摘自Qhttp://blog.csdn.net/lovelyxiaoyu/archive/2009/05/15/4189011.aspx
${stack.findValue("@package.ClassName@method")}
${stack.findValue(
"@package.ClassName@property")}
因ؓ(f) stack 是webworkl合 freemarker 后在 ftl 中可以用的,其他的还?nbsp;${base}{等


老文 2009-07-25 08:55 发表评论
]]>
Struts2的Result Typehttp://www.aygfsteel.com/lifw/archive/2009/06/18/283008.html老文老文Thu, 18 Jun 2009 03:15:00 GMThttp://www.aygfsteel.com/lifw/archive/2009/06/18/283008.htmlhttp://www.aygfsteel.com/lifw/comments/283008.htmlhttp://www.aygfsteel.com/lifw/archive/2009/06/18/283008.html#Feedback0http://www.aygfsteel.com/lifw/comments/commentRss/283008.htmlhttp://www.aygfsteel.com/lifw/services/trackbacks/283008.html   1. chain  
   
2.  
   
3.     用来处理Action?nbsp; 
   
4.   
   
5.     com.opensymphony.xwork2.ActionChainResult  
   
6.   
   
7. dispatcher  
   
8.   
   
9.     用来转向面Q通常处理JSP  
  
10.   
  
11.     org.apache.struts2.dispatcher.ServletDispatcherResult  
  
12.   
  
13. freemaker  
  
14.   
  
15.     处理FreeMarker模板  
  
16.   
  
17.     org.apache.struts2.views.freemarker.FreemarkerResult  
  
18.   
  
19. httpheader  
  
20.   
  
21.     控制Ҏ(gu)HTTP行ؓ(f)的结果类?nbsp; 
  
22.   
  
23.     org.apache.struts2.dispatcher.HttpHeaderResult  
  
24.   
  
25. redirect  
  
26.   
  
27.     重定向到一个URL  
  
28.   
  
29.     org.apache.struts2.dispatcher.ServletRedirectResult  
  
30.   
  
31. redirectAction  
  
32.   
  
33.     重定向到一个Action  
  
34.   
  
35.     org.apache.struts2.dispatcher.ServletActionRedirectResult  
  
36.   
  
37. stream  
  
38.   
  
39.     向浏览器发送InputSream对象Q通常用来处理文g下蝲Q还可用于返回AJAX数据  
  
40.   
  
41.     org.apache.struts2.dispatcher.StreamResult  
  
42.   
  
43. velocity  
  
44.   
  
45.     处理Velocity模板  
  
46.   
  
47.     org.apache.struts2.dispatcher.VelocityResult  
  
48.   
  
49. xslt  
  
50.   
  
51.     处理XML/XLST模板  
  
52.   
  
53.     org.apache.struts2.views.xslt.XSLTResult  
  
54.   
  
55. plainText  
  
56.   
  
57.     昄原始文g内容Q例如文件源代码  
  
58.   
  
59.     org.apache.struts2.dispatcher.PlainTextResult  
  
60.   
  
61. redirect-action  
  
62.   
  
63.     重定向到一个Action  
  
64.   
  
65.     org.apache.struts2.dispatcher.ServletActionRedirectResult  
  
66.   
  
67. plaintext  
  
68.   
  
69.     昄原始文g内容Q例如文件源代码  
  
70.   
  
71.     org.apache.struts2.dispatcher.PlainTextResult 


老文 2009-06-18 11:15 发表评论
]]>
Strtus2 Convention Plugin http://www.aygfsteel.com/lifw/archive/2009/06/17/282840.html老文老文Wed, 17 Jun 2009 05:49:00 GMThttp://www.aygfsteel.com/lifw/archive/2009/06/17/282840.htmlhttp://www.aygfsteel.com/lifw/comments/282840.htmlhttp://www.aygfsteel.com/lifw/archive/2009/06/17/282840.html#Feedback0http://www.aygfsteel.com/lifw/comments/commentRss/282840.htmlhttp://www.aygfsteel.com/lifw/services/trackbacks/282840.html 转蝲自:(x)http://blog.163.com/lennon.wang/blog/static/2135606200942215038914/


1.官方介绍的地址Q?

http://struts.apache.org/2.1.6/docs/convention-plugin.html


2.struts.xml文g配置

只挑选几个重要的帔R说明Q?

(1) <constant name="struts.locale" value="zh_CN"/>
      <constant name="struts.i18n.encoding" value="UTF-8"/>

      struts2.1.6  现在只需要一个struts.xml文g可以了。以前配struts.locale=zh_CNQstruts.i18n.encodingQUTF- 8Q应用v动时?x)报一个警告,说没有配|localeQ必要在struts.properties里面配置才不?x)报错,现在q个问题已经解决了,所有配 |都可以在xml文g中指定了?


(2) <constant name="struts.action.extension" value="action,do,,"/>

      扩展名可以指定ؓ(f)I。这样地址栏比较好看。但也会(x)有个问题Q就是一些其他servlet映射Q如cxfQ我们会(x)映射地址?services/*Q现在这 个地址也变成struts2控制范围的地址了,如果按默认的配置?x)报找不到action的错误。解军_法是修改mappercR这在以后文章中?x)提到?


(3)  <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
       <constant name="struts.enable.SlashesInActionNames" value="true"/>

      开启动态方法。要实现雉|,是需要动态方法调用。开启action名称可以? “/”Q一个请求地址有多?#8220;/”Qstruts2׃?x)再使用c\径扫描的命名I间Q只?x)用配|的名称。所以既想action名称里?#8220;/”Q又想用struts2默认搜烦的命名空_(d)只能自己修改一下convention插g的实现类了?


(4) <constant name="struts.ui.theme" value="simple"/>

      不用dojo的及struts2复杂标签样式的就把主题设|ؓ(f)simpleQ这样可以不加蝲多余的模ѝ?


(5) <constant name="struts.devMode" value="true"/>
      <constant name="struts.i18n.reload" value="true"/>
      <constant name="struts.configuration.xml.reload" value="true"/>
      <constant name="struts.convention.classes.reload" value="true" />

       开启开发者模式,在^时开发时修改action的annotation配置可以不重启,但是修改struts.xml文gq是要重启。修改类的具体内容,debug模式下可以不重启Q或是用javarebelQ这个不在讨围?


(6)  <constant name="struts.convention.result.path" value="/WEB-INF/pages/"/>

      指定l果面路径? convention插g?x)自动在此\径中L文g。放到WEB-INF的目的的保护文g资源Q只能通过E序内部跌{才能讉KQ我们的权限拦截器或其他权限处理只要加到action上就可以了?


(7) <constant name="struts.convention.action.suffix" value="Action"/>
     <constant name="struts.convention.action.name.lowercase" value="true"/>
     <constant name="struts.convention.action.name.separator" value="_"/>

     一个action名字的获取。比如ؓ(f)HelloWorldAction。按照配|,actionName为hello_world?


(8)<constant name="struts.convention.action.disableScanning" value="false"/>

     是否不扫描类。一定要设ؓ(f)falseQ否则convention插g不v作用Q零配置也没有意义?


(9)<constant name="struts.convention.default.parent.package" value="default"/>

     讄默认的父包,一般我们都讄一个default包承自struts-default。大部分cdl承default。如果有Ҏ(gu)的类需要特D的包,只能在action中再指定父包了?


(10) <constant name="struts.convention.package.locators" value="action"/>
       <constant name="struts.convention.package.locators.disable" value="false"/>
       <constant name="struts.convention.package.locators.basePackage" value=""/>

定搜烦包的路径。只要是l尾为action的包都要搜烦。basePackage按照默认不用配置Q如果配|,只会(x)找以此配|开头的包。locators及locators.basePackage都是一l以逗号分割的字W串?


(11)  <constant name="struts.convention.exclude.packages" value="org.apache.struts.*,org.apache.struts2.*,org.springframework.web.struts.*,org.springframework.web.struts2.*,org.hibernate."/>

排除哪些包不搜烦。按默认配置卛_。逗号分割字符丌Ӏ?


(12)  <constant name="struts.convention.action.includeJars" value="" />

包括哪些jar包中的action。逗号分割字符丌Ӏ?


(13)<constant name="struts.convention.relative.result.types" value="dispatcher,freemarker,velocity"/>

默认q回的结果类型搜索。按序先找相关的dispatcher的jsp文g是否存在。然后再找freemarkerQ再找velocity?


(14)<constant name="struts.convention.result.flatLayout" value="true"/>

      如果此D为trueQ如果一个action的命名空间ؓ(f)/loginQ名UCؓ(f)HelloWorldAction。resultq回值是successQ? 默认?x)找?WEB-INF/pages/login/hello_world.jspQ如果有hello_world_success.jsp找q个 文gQ连接符“_”是在<constant name="struts.convention.action.name.separator" value="_"/>中配|的Q。如果有一个action的resultq回值是“error”Q就?x)?WEB-INF/pages /login/hello_world_error.jsp?

      如果此D为falseQ如果一个action的命名空间ؓ(f)/loginQ名UCؓ(f)HelloWorldAction。resultq回值是successQ默认会(x)扑ֈ/WEB- INF/pages/login/hello_world/index.jspQ如果有success.jsp找q个文gQ。如果有一个action的resultq回值是“error”Q就?x)?WEB-INF/pages /login/hello_world/error.jsp?


(15) <constant name="struts.convention.action.mapAllMatches" value="false"/>
       <constant name="struts.convention.action.checkImplementsAction" value="false"/>
   <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
   <constant name="struts.convention.redirect.to.slash" value="true"/>

      q几个配|没有太多的实际意义Q本着最检查的原则可以?


(16)默认拦截器配|,已经化了许多Q一般不需要chain? fileupload。modelDriven也没什么用Q如果我们要使用restfull插g?x)有用。其实最单只要一个params可以了。我加入 exception是ؓ(f)了开发时的异常。servletConfig是ؓ(f)了包装一下request,reponse{对象,staticParams是ؓ(f) 了可以配|?{}形式参数。actionMappingParams是struts2.1新增的,我初步认为是可以在action配置中传参数Q这个还? 些疑问?/span>


1.action配置

   按照W一中的配|,讄locator为actionQ则默认一个类的命名空间ؓ(f)Q?

               c\?nbsp;                                            命名I间
com.example.action.MainAction         ->    /
com.example.action.products.Display ->    /products

    完整url为:(x)

                c\?nbsp;                                                                                     完整url
com.example.action.MainAction                                       -> /main
com.example.action.products.Display                               -> /products/display
com.example.action.company.ShowCompanyDetailsAction -> /company/details/show_company_details



3.actioncd?
    如果要实现基本零配置Q命名空间和action名称按照默认的类路径搜烦。默认执行方法是execute。方法返回值是successQ就?x)找?/span>

Java代码 复制代码
  1. package com.example.action;   
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4.   
  5. public class HelloWorld extends ActionSupport {   
  6.   
  7.     private String message;   
  8.   
  9.     public String getMessage() {   
  10.         return message;   
  11.     }   
  12.   
  13.     public String execute() {   
  14.         message = "Hello World! excute";   
  15.         return SUCCESS;   
  16.     }   
  17.   
  18.     public String edit() {   
  19.             message = "Hello World! edit";   
  20.         return "xyz";   
  21.     }   
  22.   
  23.     public String delete() {   
  24.         message = "Hello World! delete";   
  25.         return "depp";   
  26.     }   
  27.   
  28. }  
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";
}
}



    q回l果对应Q?

               c\?nbsp;                                  实际url(WEB-INF/pages)
/hello_world                                     /hello_world.jsp?hello_world_success.jsp
/hello_world!edit                               /hello_world_xyz.jsp
/hello_world!delete                            /hello_world_depp.jsp

    基本的零配置是q样Q如果要有redirect、chain{蟩转方式,interceptor的配|,p加入annotation?


2.actioncM的annotation

convention插g的annotation都在annotationq个包中Q基本和xml配置相对应?

    annotation           意义                                                                        作用?
ParentPackage   指定l承的包(struts2)?nbsp;                                             包,c?
Namespaces      l一个action指定多个命名I间(一般不?                      包,c?
Namespace       指定一个命名空?一般不用,按默认的c\径即?         包,c,Namespaces注解?
actions              l一个action指定多个名称                                            Ҏ(gu)
action               指定一个action名称                                                      c,Ҏ(gu)Qactions注解?
InterceptorRefs 一l拦截器集合(只能是名Uͼ必须先在xml文g中配|好)  c,action注解?nbsp;
InterceptorRef   一个拦截器                                                                  c,InterceptorRefs注解?
ResultPath        l果映射的\?已经在struts.xml文g中指?                 包,c?
Results             多个l果集合                                                               c,action注解?
Result              一个结果定?nbsp;                                                               c,Results注解?

    需要注意:(x)

1Q包(java)U别是在package-info.javaq个文g中配|,可以配置整个包的定义Q但是命名空间就不能按默认的c\径扫描了Q必M要显式的配置。所以这个文件最好不要用?

2Q不在包(java)U别配置p在类(java)U别配置Q可能每个类都要写一句ParentPackageQ指定承的?struts2)Q以获得父包中的拦截器配|及其他公用配置。如果没有特D的拦截器配|则不用配置ParentPackage?

3Q最好把annotation配到cȝ别,因ؓ(f)q样action名称及命名空间都可用默认的类路径扫描Q不用我们显式的配置。只要配|? Ҏ(gu)的result和拦截器卛_。类中的其他Ҏ(gu)使用动态方法调用的方式使用同一个配|。我们知道struts2所有配|都是启动加载到map中的Q减? 配置Q会(x)提高一定性能。而动态方法这U模式是雉|必不可的Q但我很不喜Ƣ叹号出现在地址栏中Q所以在后面的文章中我会(x)l合restful插g及自׃ Ҏ(gu)代码实现意义上的动态方法调用,但Ş式上是别的方式,地址栏会(x)比较观?/span>
Java代码 复制代码
  1. package com.example.action;   
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4. import org.apache.struts2.convention.annotation.Result;   
  5. import org.apache.struts2.convention.annotation.Results;   
  6. import org.apache.struts2.convention.annotation.InterceptorRef;   
  7. import org.apache.struts2.convention.annotation.InterceptorRefs;   
  8.   
  9. @InterceptorRefs({   
  10.     @InterceptorRef("interceptor-1"),   
  11.     @InterceptorRef("defaultStack")   
  12. })   
  13. @Results({   
  14.     @Result(name="reload",location="hello_world",type="redirectAction",params={key1,value1,key2,value2}),   
  15.     @Result(name="chainact",location="hello_world!edit",type="chain")   
  16. })   
  17. public class HelloWorld extends MyBaseAction {   
  18.   
  19.     private String message;   
  20.   
  21.     public String getMessage() {   
  22.         return message;   
  23.     }   
  24.   
  25.     public String execute() {   
  26.         message = "Hello World! excute";   
  27.         return SUCCESS;   
  28.     }   
  29.   
  30.     public String edit() {   
  31.             message = "Hello World! edit";   
  32.         return RELOAD;   
  33.     }   
  34.            
  35.     public String delete() {   
  36.             message = "Hello World! delete";   
  37.         return CHAINACT;   
  38.     }   
  39. }  
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;
}
}


4Q如果有极其Ҏ(gu)的情况需要ؓ(f)action的每个方? 单独配置Q这时就不能用默认的cL描了Q必L先配|a(chn)ctionQ指定名Uͼ再在action中配|result和interceptor。这׃(x)佉K |增多,q背的零配置的初街有时我们ؓ(f)了性能原因x拦截器细化到具体的action上,我想如果真是q样Q我们还不如再写一个actioncR还? struts2.1.6原有的配|是如果action名称中有“/”Q会(x)认ؓ(f)q是一个命名空_(d)不会(x)再按照类扫描的默认倹{例如:(x)

Java代码 复制代码
  1. package com.example.action;   
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4. import org.apache.struts2.convention.annotation.Action;   
  5.   
  6. public class HelloWorld extends ActionSupport {   
  7.   
  8.     @Action("/different/url")   
  9.     public String execute() {   
  10.         return SUCCESS;   
  11.     }   
  12.   
  13.     @Action("url")   
  14.     public String doSomething() {   
  15.         return SUCCESS;   
  16.     }   
  17. }  
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;
}
}


    调用Ҏ(gu)execute的url?:       /different/url (命名I间已经更换)
    调用Ҏ(gu)doSomething的url?:   /url

5Q比较别扭的地方是拦截器的配置Q必ȝ名称Q而名U和实际拦截器类的对应关pL在struts.xml文g中声明的Q如果用 struts2以前的annotation是可以直接配|拦截器cȝQ但是我没有和convention插gl合使用Q这个问题我正在研究Q看看有没有? 的办法?

6Q还有一U默认的chain跌{Q实际是在struts2.1.6中新增的unknownHandleder中设定的Q没有什么太大作用,我们可以不用。而unknownHandleder我们可以自定义ؓ(f)其他Q这在后面的文章中会(x)有说明?


1.Convention插g的主要实现浅?

1.1  PackageBasedActionConfigBuilder q个cL重要Q是整个E序的入口?
     1.1.1  buildActionConfigsҎ(gu)q行初始化配|,其中findActions扫描c\径,我没有深入研I这个方法具体是怎么扑ֈ所有类的。只? 扑ֈ全部cdQ和我们的配|文件中限定的范围匹配、过滤,存入一个set中。然后buildConfiguration(set)循环分析q些cR?

     1.1.2  buildConfigurationҎ(gu)Q首先创Z个mapcd的packageConfigs。键为包Qstruts2Q名Qgؓ(f)PackageConfig.Builder对象Q这个对象可以创建PackageConfig对象?
      然后循环扑ֈ的类Q分析包名(javaQ,determineActionNamespaceҎ(gu)分析命名I间Q得C个list对象?
      再@环所有命名空_(d)determineActionNameҎ(gu)分析cdU、类的默认方法(q个是写dE序中的Q就是executeҎ(gu)Q?
      getPackageConfigҎ(gu)分析得到PackageConfig.Builder对象?
      getActionAnnotationsҎ(gu)分析得到actioncL法的annotation配置?
      循环每个Ҏ(gu)的配|,调用createActionConfigҎ(gu)分析Q把 resultsQinterceptorsQexceptionMappings{配|放入ActionConfig.Builder对象Q再? ActionConfig对象Q由ActionConfig.Builder生成Q放入PackageConfig.Builder中?
      buildIndexActions创徏默认索引action。这个好像用处不大?
      最后把PackageConfig对象攑օConfiguration对象中,q是最的配|。我们在M旉和地炚w可以得到Configuration对象Qƈ对其q行分析?

     1.1.3   determineActionNamespaceҎ(gu)是确定一个actioncdweb应用中的命名I间Q先找这个类的Namespace注解Q找到后 攑օ一个存储命名空间的list。再找Namespaces注解Q一个action可以有多个命名空间。如果有注解则按照注解来定一个action的命 名空_(d)如果没有Q则分析q个action所在包QjavaQ的路径Q按照struts2.xml中配|的规则来确定。这个规则就是截取到定义? locatorQ在q个locator之后的包QjavaQ全部作为命名空_(d)cd作ؓ(f)action名称?

     1.1.4   determineActionNameҎ(gu)是确定一个actioncdweb应用中的名称。由ActionNameBuilderQ接口)的方法来? 玎ͼq个接口的具体实现类Q插仉认ؓ(f)SEOActionNameBuilder。被UCؓ(f)搜烦引擎友好的名U。会(x)把actioncȝname按单词分解, 然后用连接符qv来。默认连接符?-"Q我们可以设|ؓ(f)"_"?

     1.1.5   getPackageConfigҎ(gu)是确定一个actioncdweb应用中的l承的包Qstruts2Q。先找这个类的ParentPackage? 解,如果有注解则按照注解来确定一个action的父包(struts2Q,如果没有Q按照struts.xml中配|的规则来确定。这个规则就? defaultParentPackage。得到父包(struts2Q后要拼成:(x) actionPackage + "#" + parentPkg.getName() + "#" + actionNamespace 的Ş式,q是xwork里的规定?

     1.1.6   getActionAnnotationsҎ(gu)是确定一个actioncȝҎ(gu)上的annotation配置。先找方法的Actions注解Q一个方法可 以有多个action映射。再找Action注解Q放入一个map中,键是Ҏ(gu)名,值是存储一lacton映射的list对象?
    
      1.1.7   createActionConfigҎ(gu)构造ActionConfig.Builder对象Q逐一判断 interceptorsQresultsQexceptionMappingsQ都是从cMU开始判断是否有此注解,再从Ҏ(gu)的action注解中寻 找。InterceptorMapBuilderQResultMapBuilder是两个接口,提供通过注解构造Interceptor和Result 的方法,插g分别提供了默认的实现DefaultInterceptorMapBuilder和DefaultResultMapBuilder。? buildExceptionMappings只是本类中的一个方法?

1.2  DefaultInterceptorMapBuilder
     先找actioncL否存在InterceptorRefs注解Q再看是否存在InterceptorRef注解Q再看action注解中是否定义了InterceptorRefs?
     q用CStringTools的createParameterMapҎ(gu)把注解中的paramsQŞ式ؓ(f){key1,value1,key2,value2,......}Q{化成一个map?
      buildInterceptorListҎ(gu)利用了xwork中的InterceptorBuilder的一个静态方法constructInterceptorReference把拦截器注入到配|中?
      而一个action所l承的父包中的拦截器Q或是默认拦截器Qƈ不在q个cM构造。而是由xworkҎ(gu)包(struts2Q的l承关系加蝲QactionPackage + "#" + parentPkg.getName() + "#" + actionNamespace q是xwork里规定的形式Q已l由PackageBasedActionConfigBuilder 配置Q?

1.3 DefaultResultMapBuilder
    1.3.1  buildҎ(gu)Q确定defaultResultPathQ构造包含ResultConfig的map对象Q再通过扩展名获得一个包? ResultTypeConfig的map对象。createFromResourcesҎ(gu)获得默认q回l果面Q然后查找action注解中的 results配置Q再扄U别的Results注解Q再扄U别的Result注解Q相同的肯定?x)覆盖。createFromAnnotations?

    1.3.2  createFromResourcesҎ(gu)中用servletContext.getResourcePathsҎ(gu)L面。如? struts.xml中配|flatLayout为true则直接找C命名I间为名U的文g夹,在此文g夹中L面Q如果flatLayout? falseQ则?x)找C命名I间为名U的文g夹,再找到此文g夹中的以action名称命名的子文g夹,在这个文件夹中寻N面?

    1.3.3  makeResultsҎ(gu)N认的q回面Q如果没有\径没有包含resultcodeQ定义的字符Ԍ的页面,则按默认序L successQinputQerror。比如hello_world.jsp文gQflatLayout为trueQ连接符?_"Q,如果没有 hello_world_success.jspQhello_world_input.jspQhello_world_error.jsp文gQ同 ?success"Q?input"Q?error"Q又没有昑ּ的配|,只是作ؓ(f)l果字符串返回,则程序默认会(x)用hello_world.jsp来匹 配三U结果。如果结果字W串resultcode?edit"Q同时又没有昑ּ的配|,则必?x)找hello_world_edit.jsp?

    1.3.4  createFromAnnotationsq个Ҏ(gu)是把注解{换成ResultConfig配置?

1.4 ConventionsServiceImpl
    是result配置的辅助类。determineResultPathҎ(gu)先判断struts.xml文g中的配置Q再判断actioncȝ注解中是否有ResultPathQ如果有覆盖struts.xml中配|?
     getResultTypesByExtensionҎ(gu)提供一个map对象Q默认的resultl果q回?

      其实通过看这些方法,我们也基本了解了struts2的整个配|过E,非常J琐Q很多的判断实很耗费资源Q用xml配置也一栗我们也知道所有配|信息都是应用启动时加蝲Q存入map中常d存。所以我们应该尽可能减少配置Q多使用动态方法调用?

1.5  ConventionUnknownHandler 是UnknownHandler接口的一个实玎ͼ用来处理找不到相应配|的情况。在struts2.1的dtd中新增了一?lt;unknown-handler-stack>元素Q可以配|一lhandler?
       handleUnknownActionҎ(gu)处理找不到action的情c这个我感觉用处不大?
       handleUnknownResultҎ(gu)处理找不到result的情c这个方法可以有很多扩展。比如我惛_义一U返回值Ş式:(x)redirect->xxx.do?ad=12或chain->xxx.do。用q种形式比写注解要方便的多?
       handleUnknownActionMethodҎ(gu)处理找不到action中方法的情况。这个默认没有实现?/span>

老文 2009-06-17 13:49 发表评论
]]>
վ֩ģ壺 | Դ| | | ɽ| | | | | ˮ| Դ| | ϲ| ˮ| | ޽| | | ˮ| | ǭ| ݸ| ʡ| | Ԫı| | ˳| | | | | ɽ| ɽ| ѭ| | | ˫Ѽɽ| | ξ| | ڻ|