﻿<?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-cyantide-随笔分类-struts2</title><link>http://www.blogjava.net/cyantide/category/36403.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 28 Jun 2010 06:35:55 GMT</lastBuildDate><pubDate>Mon, 28 Jun 2010 06:35:55 GMT</pubDate><ttl>60</ttl><item><title>struts2 和 fckeditor 整合</title><link>http://www.blogjava.net/cyantide/archive/2010/06/28/324671.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Mon, 28 Jun 2010 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2010/06/28/324671.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/324671.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2010/06/28/324671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/324671.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/324671.html</trackback:ping><description><![CDATA[1. 需重新编写filter,继承StrutsPrepareAndExecuteFilter<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.IOException;<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.servlet.FilterChain;<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.servlet.ServletException;<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.servlet.ServletRequest;<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.servlet.ServletResponse;<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.servlet.http.HttpServletRequest;<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;StrutsAndFckFilter&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;StrutsPrepareAndExecuteFilter&nbsp;{<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response,<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilterChain&nbsp;chain)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException,&nbsp;ServletException&nbsp;{<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;httpRequest</span><span style="color: #000000;">=</span><span style="color: #000000;">(HttpServletRequest)request;<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">/fckeditor/editor/filemanager/connectors</span><span style="color: #000000;">"</span><span style="color: #000000;">.equals(httpRequest.getServletPath())){<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain.doFilter(request,&nbsp;response);<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">super</span><span style="color: #000000;">.doFilter(request,&nbsp;response,&nbsp;chain);<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">27</span>&nbsp;</div>
2. 在classes目录添加 fckeditor.properties 文件<br />
&nbsp;&nbsp; 内容为 connector.userActionImpl=net.fckeditor.requestcycle.impl.EnabledUserAction<br />
<br />
3. 修改web.xml<br />
&nbsp;&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">filter</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">filter-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">struts2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">filter-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">filter-class</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">com.capinfo.cms.common.filter.StrutsAndFckFilter</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">filter-class</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">filter</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">servlet</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">servlet-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">ConnectorServlet</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">servlet-class</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; net.fckeditor.connector.ConnectorServlet<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet-class</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">load-on-startup</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">load-on-startup</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">11</span> <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">13</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">servlet-mapping</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">servlet-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">ConnectorServlet</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Do&nbsp;not&nbsp;wrap&nbsp;this&nbsp;line&nbsp;otherwise&nbsp;Glassfish&nbsp;will&nbsp;fail&nbsp;to&nbsp;load&nbsp;this&nbsp;file&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">url-pattern</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/fckeditor/editor/filemanager/connectors/*</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">url-pattern</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">17</span> <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet-mapping</span><span style="color: #0000ff;">&gt;</span></div>
综上所述之后,整合完毕<br />
<br />
<img src ="http://www.blogjava.net/cyantide/aggbug/324671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2010-06-28 14:32 <a href="http://www.blogjava.net/cyantide/archive/2010/06/28/324671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2中的OGNL (转帖)</title><link>http://www.blogjava.net/cyantide/archive/2009/11/03/300845.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Tue, 03 Nov 2009 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2009/11/03/300845.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/300845.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2009/11/03/300845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/300845.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/300845.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts 2中的OGNL 本人是一个EL（Expression Language，以下译为表达式语言）的支持者。因为我对&lt;% %&gt;写法极为反感，忘记了在那本书上看到的一句话——&#8220;使用标志（Tag）的一个目的就是避免在JSP页面中出现过多的&lt;%%&gt;的语句，使页面与后台代码分离。&#8221;表达式语言主要有以下几大好处：    避免(MyTyp...&nbsp;&nbsp;<a href='http://www.blogjava.net/cyantide/archive/2009/11/03/300845.html'>阅读全文</a><img src ="http://www.blogjava.net/cyantide/aggbug/300845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2009-11-03 10:16 <a href="http://www.blogjava.net/cyantide/archive/2009/11/03/300845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 ognl用法</title><link>http://www.blogjava.net/cyantide/archive/2009/09/24/296246.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Thu, 24 Sep 2009 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2009/09/24/296246.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/296246.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2009/09/24/296246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/296246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/296246.html</trackback:ping><description><![CDATA[#、%和$符号在OGNL表达式中经常出现，而这三种符号也是开发者不容易掌握和理解的部分。在这里笔者简单介绍它们的相应用途。<br />
<br />
1．#符号的用途一般有三种。<br />
&nbsp;&nbsp;
1)访问非根对象属性，例如示例中的#session.msg表达式，由于Struts
2中值栈被视为根对象，所以访问其他非根对象时，需要加#前缀。实际上，#相当于ActionContext.
getContext()；#session.msg表达式相当于ActionContext.getContext().getSession().
getAttribute(&#8221;msg&#8221;) 。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2)用于过滤和投影（projecting）集合，如示例中的persons.{?#this.age&gt;20}。<br />
&nbsp;&nbsp;&nbsp;&nbsp;3)用来构造Map，例如示例中的#{'foo1':'bar1','foo2':'bar2'}。<br />
<br />
2．%符号<br />
%符号的用途是在标志的属性为字符串类型时，计算OGNL表达式的值。如下面的代码所示：<br />
构造Map<br />
&lt;s:set name="foobar" value="#{'foo1':'bar','foo2':'bar2'}" /&gt;<br />
<br />
&lt;p&gt;The value of key "foo1" is &lt;s:property value="#foobar['foo1']" /&gt;&lt;/p&gt;<br />
<br />
&lt;p&gt;不使用％：&lt;s:url value="#foobar['foo1']" /&gt;&lt;/p&gt;<br />
<br />
&lt;p&gt;使用％：&lt;s:url value="%{#foobar['foo1']}" /&gt;&lt;/p&gt;<br />
<br />
3．$符号<br />
$符号主要有两个方面的用途。<br />
<br />
&nbsp;&nbsp; 在国际化资源文件中，引用OGNL表达式，例如国际化资源文件中的代码：reg.agerange=国际化资源信息：年龄必须在${min}同${max}之间。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;在Struts 2框架的配置文件中引用OGNL表达式，例如下面的代码片断所示：<br />
&lt;validators&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;field name=&#8221;intb&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;field-validator type=&#8221;int&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name=&#8221;min&#8221;&gt;10&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name=&#8221;max&#8221;&gt;100&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;message&gt;BAction-test校验：数字必须为${min}为${max}之间！&lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/field&gt;<br />
&lt;/validators&gt;
<img src ="http://www.blogjava.net/cyantide/aggbug/296246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2009-09-24 10:24 <a href="http://www.blogjava.net/cyantide/archive/2009/09/24/296246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2的struts.properties 配置(转帖)</title><link>http://www.blogjava.net/cyantide/archive/2008/12/03/244214.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Wed, 03 Dec 2008 13:57:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2008/12/03/244214.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/244214.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2008/12/03/244214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/244214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/244214.html</trackback:ping><description><![CDATA[<div>
<p>struts.action.extension<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;URL&nbsp;extension&nbsp;to&nbsp;use&nbsp;to&nbsp;determine&nbsp;if&nbsp;the&nbsp;request&nbsp;is&nbsp;meant&nbsp;for&nbsp;a&nbsp;Struts&nbsp;action&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用URL扩展名来确定是否这个请求是被用作Struts&nbsp;action，其实也就是设置&nbsp;action的后缀，例如login.do的'do'字。<br />
<br />
struts.configuration<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;org.apache.struts2.config.Configuration&nbsp;implementation&nbsp;class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.config.Configuration接口名<br />
<br />
struts.configuration.files<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;list&nbsp;of&nbsp;configuration&nbsp;files&nbsp;automatically&nbsp;loaded&nbsp;by&nbsp;Struts&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struts自动加载的一个配置文件列表<br />
<br />
struts.configuration.xml.reload<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether&nbsp;to&nbsp;reload&nbsp;the&nbsp;XML&nbsp;configuration&nbsp;or&nbsp;not<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否加载xml配置(true,false)<br />
<br />
struts.continuations.package<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;package&nbsp;containing&nbsp;actions&nbsp;that&nbsp;use&nbsp;Rife&nbsp;continuations<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;含有actions的完整连续的package名称<br />
<br />
struts.custom.i18n.resources<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Location&nbsp;of&nbsp;additional&nbsp;localization&nbsp;properties&nbsp;files&nbsp;to&nbsp;load&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;加载附加的国际化属性文件（不包含.properties后缀）<br />
<br />
struts.custom.properties<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Location&nbsp;of&nbsp;additional&nbsp;configuration&nbsp;properties&nbsp;files&nbsp;to&nbsp;load<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;加载附加的配置文件的位置<br />
<br />
<br />
struts.devMode<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether&nbsp;Struts&nbsp;is&nbsp;in&nbsp;development&nbsp;mode&nbsp;or&nbsp;not<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否为struts开发模式<br />
<br />
struts.dispatcher.parametersWorkaround<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether&nbsp;to&nbsp;use&nbsp;a&nbsp;Servlet&nbsp;request&nbsp;parameter&nbsp;workaround&nbsp;necessary&nbsp;for&nbsp;some&nbsp;versions&nbsp;of&nbsp;WebLogic<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（某些版本的weblogic专用）是否使用一个servlet请求参数工作区（PARAMETERSWORKAROUND）<br />
<br />
struts.enable.DynamicMethodInvocation<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allows&nbsp;one&nbsp;to&nbsp;disable&nbsp;dynamic&nbsp;method&nbsp;invocation&nbsp;from&nbsp;the&nbsp;URL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;允许动态方法调用<br />
<br />
struts.freemarker.manager.classname<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;org.apache.struts2.views.freemarker.FreemarkerManager&nbsp;implementation&nbsp;class&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.views.freemarker.FreemarkerManager接口名<br />
<br />
struts.i18n.encoding<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;encoding&nbsp;to&nbsp;use&nbsp;for&nbsp;localization&nbsp;messages<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;国际化信息内码<br />
<br />
struts.i18n.reload<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether&nbsp;the&nbsp;localization&nbsp;messages&nbsp;should&nbsp;automatically&nbsp;be&nbsp;reloaded<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否国际化信息自动加载&nbsp;<br />
<br />
struts.locale<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;default&nbsp;locale&nbsp;for&nbsp;the&nbsp;Struts&nbsp;application<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认的国际化地区信息<br />
<br />
struts.mapper.class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;org.apache.struts2.dispatcher.mapper.ActionMapper&nbsp;implementation&nbsp;class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.mapper.ActionMapper接口<br />
<br />
struts.multipart.maxSize<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;maximize&nbsp;size&nbsp;of&nbsp;a&nbsp;multipart&nbsp;request&nbsp;(file&nbsp;upload)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multipart请求信息的最大尺寸（文件上传用）&nbsp;<br />
<br />
struts.multipart.parser<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;org.apache.struts2.dispatcher.multipart.MultiPartRequest&nbsp;parser&nbsp;implementation&nbsp;for&nbsp;a&nbsp;multipart&nbsp;request&nbsp;(file&nbsp;upload)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;专为multipart请求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口（文件上传用）<br />
<br />
<br />
struts.multipart.saveDir<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;directory&nbsp;to&nbsp;use&nbsp;for&nbsp;storing&nbsp;uploaded&nbsp;files&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置存储上传文件的目录夹<br />
<br />
struts.objectFactory<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;com.opensymphony.xwork2.ObjectFactory&nbsp;implementation&nbsp;class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.opensymphony.xwork2.ObjectFactory接口（spring）<br />
<br />
struts.objectFactory.spring.autoWire<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether&nbsp;Spring&nbsp;should&nbsp;autoWire&nbsp;or&nbsp;not<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否自动绑定Spring<br />
<br />
struts.objectFactory.spring.useClassCache<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether&nbsp;Spring&nbsp;should&nbsp;use&nbsp;its&nbsp;class&nbsp;cache&nbsp;or&nbsp;not<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否spring应该使用自身的cache&nbsp;<br />
<br />
struts.objectTypeDeterminer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;com.opensymphony.xwork2.util.ObjectTypeDeterminer&nbsp;implementation&nbsp;class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.opensymphony.xwork2.util.ObjectTypeDeterminer接口<br />
<br />
struts.serve.static.browserCache<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;static&nbsp;content&nbsp;served&nbsp;by&nbsp;the&nbsp;Struts&nbsp;filter&nbsp;should&nbsp;set&nbsp;browser&nbsp;caching&nbsp;header&nbsp;properties&nbsp;or&nbsp;not&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否struts过滤器中提供的静态内容应该被浏览器缓存在头部属性中<br />
<br />
struts.serve.static<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether&nbsp;the&nbsp;Struts&nbsp;filter&nbsp;should&nbsp;serve&nbsp;static&nbsp;content&nbsp;or&nbsp;not&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否struts过滤器应该提供静态内容<br />
<br />
struts.tag.altSyntax<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether&nbsp;to&nbsp;use&nbsp;the&nbsp;alterative&nbsp;syntax&nbsp;for&nbsp;the&nbsp;tags&nbsp;or&nbsp;not&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否可以用替代的语法替代tags<br />
<br />
struts.ui.templateDir<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;directory&nbsp;containing&nbsp;UI&nbsp;templates<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UI&nbsp;templates的目录夹&nbsp;<br />
<br />
struts.ui.theme<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;default&nbsp;UI&nbsp;template&nbsp;theme<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认的UI&nbsp;template主题<br />
<br />
struts.url.http.port<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;HTTP&nbsp;port&nbsp;used&nbsp;by&nbsp;Struts&nbsp;URLs<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置http端口<br />
<br />
struts.url.https.port<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;HTTPS&nbsp;port&nbsp;used&nbsp;by&nbsp;Struts&nbsp;URLs&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置https端口<br />
<br />
struts.url.includeParams<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;default&nbsp;includeParams&nbsp;method&nbsp;to&nbsp;generate&nbsp;Struts&nbsp;URLs&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在url中产生&nbsp;默认的includeParams<br />
<br />
<br />
struts.velocity.configfile<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;Velocity&nbsp;configuration&nbsp;file&nbsp;path<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;velocity配置文件路径<br />
<br />
struts.velocity.contexts<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;of&nbsp;Velocity&nbsp;context&nbsp;names<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;velocity的context列表<br />
<br />
<br />
struts.velocity.manager.classname<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.views.velocity.VelocityManager&nbsp;implementation&nbsp;class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.views.velocity.VelocityManager接口名<br />
<br />
struts.velocity.toolboxlocation<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;location&nbsp;of&nbsp;the&nbsp;Velocity&nbsp;toolbox<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;velocity工具盒的位置&nbsp;<br />
struts.xslt.nocache<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether&nbsp;or&nbsp;not&nbsp;XSLT&nbsp;templates&nbsp;should&nbsp;not&nbsp;be&nbsp;cached<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否XSLT模版应该被缓存</p>
<p>struts.serve.static.browserCache 该属性设置浏览器是否缓存静态内容。当应用处于开发阶段时，我们希望每次请求都获得服务器的最新响应，则可设置该属性为false。</p>
<p>struts.enable.DynamicMethodInvocation 该属性设置Struts 2是否支持动态方法调用，该属性的默认值是true。如果需要关闭动态方法调用，则可设置该属性为false。</p>
<p>struts.enable.SlashesInActionNames 该属性设置Struts 2是否允许在Action名中使用斜线，该属性的默认值是false。如果开发者希望允许在Action名中使用斜线，则可设置该属性为true。</p>
<p>struts.tag.altSyntax 该属性指定是否允许在Struts 2标签中使用表达式语法，因为通常都需要在标签中使用表达式语法，故此属性应该设置为true，该属性的默认值是true。</p>
<p>struts.devMode该属性设置Struts 2应用是否使用开发模式。如果设置该属性为true，则可以在应用出错时显示更多、更友好的出错提示。该属性只接受true和flase两个值，该属性的默认值是false。通常，应用在开发阶段，将该属性设置为true，当进入产品发布阶段后，则该属性设置为false。</p>
<p>struts.i18n.reload该属性设置是否每次HTTP请求到达时，系统都重新加载资源文件。该属性默认值是false。在开发阶段将该属性设置为true会更有利于开发，但在产品发布阶段应将该属性设置为false。</p>
<p>提示 开发阶段将该属性设置了true，将可以在每次请求时都重新加载国际化资源文件，从而可以让开发者看到实时开发效果；产品发布阶段应该将该属性设置为false，是为了提供响应性能，每次请求都需要重新加载资源文件会大大降低应用的性能。</p>
<p>struts.ui.theme该属性指定视图标签默认的视图主题，该属性的默认值是xhtml。</p>
<p>struts.ui.templateDir该属性指定视图主题所需要模板文件的位置，该属性的默认值是template，即默认加载template路径下的模板文件。</p>
<p>struts.ui.templateSuffix该属性指定模板文件的后缀，该属性的默认属性值是ftl。该属性还允许使用ftl、vm或jsp，分别对应FreeMarker、Velocity和JSP模板。</p>
<p>struts.configuration.xml.reload该属性设置当struts.xml文件改变后，系统是否自动重新加载该文件。该属性的默认值是false。</p>
<p>struts.velocity.configfile该属性指定Velocity框架所需的velocity.properties文件的位置。该属性的默认值为velocity.properties。</p>
<p>struts.velocity.contexts该属性指定Velocity框架的Context位置，如果该框架有多个Context，则多个Context之间以英文逗号（,）隔开。</p>
<p>struts.velocity.toolboxlocation该属性指定Velocity框架的toolbox的位置。</p>
<p>struts.url.http.port该属性指定Web应用所在的监听端口。该属性通常没有太大的用户，只是当Struts 2需要生成URL时（例如Url标签），该属性才提供Web应用的默认端口。</p>
<p>struts.url.https.port该属性类似于struts.url.http.port属性的作用，区别是该属性指定的是Web应用的加密服务端口。</p>
<p>struts.url.includeParams该属性指定Struts 2生成URL时是否包含请求参数。该属性接受none、get和all三个属性值，分别对应于不包含、仅包含GET类型请求参数和包含全部请求参数。</p>
<p><br />
struts.custom.i18n.resources该属性指定Struts 2应用所需要的国际化资源文件，如果有多份国际化资源文件，则多个资源文件的文件名以英文逗号（,）隔开。</p>
<p><br />
struts.dispatcher.parametersWorkaround 对于某些Java EE服务器，不支持HttpServlet Request调用getParameterMap()方法，此时可以设置该属性值为true来解决该问题。该属性的默认值是false。对于 WebLogic、Orion和OC4J服务器，通常应该设置该属性为true。</p>
<p>struts.freemarker.manager.classname 该属性指定Struts 2使用的FreeMarker管理器。该属性的默认值是 org.apache.struts2.views.freemarker.FreemarkerManager，这是Struts 2内建的FreeMarker管理器。</p>
<p>struts.freemarker.wrapper.altMap该属性只支持true和false两个属性值，默认值是true。通常无需修改该属性值。</p>
<p>struts.xslt.nocache 该属性指定XSLT Result是否使用样式表缓存。当应用处于开发阶段时，该属性通常被设置为true；当应用处于产品使用阶段时，该属性通常被设置为false。</p>
<p>struts.configuration.files 该属性指定Struts 2框架默认加载的配置文件，如果需要指定默认加载多个配置文件，则多个配置文件的文件名之间以英文逗号（,）隔开。该属性的默认值为struts- default.xml,struts-plugin.xml,struts.xml，看到该属性值，读者应该明白为什么Struts 2框架默认加载struts.xml文件了。</p>
</div>
 <img src ="http://www.blogjava.net/cyantide/aggbug/244214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2008-12-03 21:57 <a href="http://www.blogjava.net/cyantide/archive/2008/12/03/244214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 ognl分析(转帖)</title><link>http://www.blogjava.net/cyantide/archive/2008/12/02/243903.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Tue, 02 Dec 2008 04:58:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2008/12/02/243903.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/243903.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2008/12/02/243903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/243903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/243903.html</trackback:ping><description><![CDATA[Struts2在OGNL基础上的增强<br />
　　１、值栈(ValueStack)<br />
　　　　Struts2将OGNL上下文设置为Struts2中的ActionContext(内部使用的仍然是OgnlContext)，并将值栈设为OGNL的根对象。<br />
　　　　我们知道，OGNL上下文中的根对象可以直接访问，不需要使用任何特殊的&#8220;标记&#8221;，而引用上下文中的其他对象则需要使用&#8220;#&#8221;来标记。由于值栈是上下文中的根对象，因此可以直接访问。那么对于值栈中的对象该如何访问呢？Struts2提供了一个特殊的OGNLPropertyAccessor，它可以自动查找栈内的所有对象(从栈顶到栈底)，直接找到一个具有你所查找的属性的对象。也就是说，对于值栈中的任何对象都可以直接访问，而不需要使用&#8220;#&#8221;。<br />
　　　　假设值栈中有两个对象：student和employee，两个对象都有name属性，student有学号属性number，而employee有薪水属性salary。employee先入栈，student后入栈，位于栈顶，那么对于表达式name,访问的就是student的name属性，因为student对象位于栈顶；表达式salary，访问的就是employee的salary属性。正如你所见，访问值栈中的对象属性或方法，无须指明对象，也不用&#8220;#&#8221;，就好像值栈中的对象都是OGNL上下文中的根对象一样。这就是Struts2在OGNL基础上做出的改进。<br />
　　２、[N]语法<br />
　　　　如上所述，如果想要访问employee的name属性，应该如何写表达式呢？我们可以使用[N].xxx(N是从0开始的整数)这样的语法来指定从哪一个位置开始向下查找对象的属性，表达式[1].name访问的就是employee对象的name属性。<br />
　　　　在使用[N].xxx语法时，要注意位置序号的含义，它并不是表示&#8220;获取栈中索引为N的对象&#8221;，而是截取从位置N开始的部分栈。<br />
　　３、top关键字<br />
　　　　top用于获取栈顶的对象，结合[N].xxx语法，我们就可以获取栈中任意位置的对象。<br />
　　　　如：[0].top,[1].top等<br />
　　４、访问静态成员<br />
　　　　除了使用标准的OGNL表达式访问静态字段和静态方法外，Struts2还允许你不指定完整的类名，而是通过&#8220;vs&#8221;前缀来调用保存在栈中的静态字段和静态方法。<br />
　　　　@vs@FOO_PROPERTY<br />
　　　　@vs@someMethod()<br />
　　　　@vs1@someMethod()<br />
　　　　vs表示ValueStack，如果只有vs，那么将使用栈顶对象的类；如果在vs后面跟上一个数字，那么将使用栈中指定位置处的对象类。<br />
　　５、值栈中的Action实例<br />
　　　　Struts2框架总是把Action实例放在栈顶。因为Action在值栈中，而值栈又是OGNL中的根，所以引用Action的属性可以省略&#8220;#&#8221;标记，这也是为什么我们在结果页面中可以直接访问Action的属性的原因。<br />
　　６、Struts2中的命名对象<br />
　　　　Struts2还提供了一些命名对象，这些对象没有保存在值栈中，而是保存在ActionContext中，因此访问这些对象需要使用&#8220;#&#8221;标记。这些命名对象都是Map类型。<br />
　　　parameters<br />
　　　　用于访问请求参数。如：#parameters['id']或#parameters.id，相当于调用了HttpServletRequest对象的getParameter()方法。<br />
　　　　注意，parameters本质上是一个使用HttpServletRequest对象中的请求参数构造的Map对象，一量对象被创建(在调用Action实例之前就已经创建好了)，它和HttpServletRequest对象就没有了任何关系。<br />
　　　request<br />
　　　　用于访问请求属性。如：#request['user']或#request.user，相当于调用了HttpServletRequest对象的getAttribute()方法。<br />
　　　session<br />
　　　　用于访问session属性。如：#session['user']或#session.user，相当于调用了HttpSession对象的getAttribute()方法。<br />
　　　application<br />
　　　　用于访问application属性。如：#application['user']或#application.user，相当于调用了ServletContext的getAttribute()方法。<br />
　　　attr<br />
　　　　如果PageContext可用，则访问PageContext，否则依次搜索request、session和application对象。
<img src ="http://www.blogjava.net/cyantide/aggbug/243903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2008-12-02 12:58 <a href="http://www.blogjava.net/cyantide/archive/2008/12/02/243903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 iterator标签 分析(转贴)</title><link>http://www.blogjava.net/cyantide/archive/2008/12/02/243901.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Tue, 02 Dec 2008 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2008/12/02/243901.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/243901.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2008/12/02/243901.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/243901.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/243901.html</trackback:ping><description><![CDATA[iterator标签主要是用于迭代输出集合元素,如list set map 数组等,在使用&lt;s:iterator/&gt;标签的时候有三个属性值得我们关注
<p>1. value属性:可选的属性,value属性是指一个被迭代的集合,使用ognl表达式指定,如果为空的话默认就是ValueStack栈顶的集合.<br />
2.id属性:可选属性, 是指集合元素的id<br />
3.status属性:可选属性,该属性在迭代时会产生一个IteratorStatus对象,该对象可以判断当前元素的位置,包含了以下属性方法:</p>
<p>int&nbsp; getCount();&nbsp; 迭代元素个数</p>
<p>int&nbsp; getIndex();&nbsp; 迭代元素当前索引</p>
<p>boolean getFirst(); 是否为第一个</p>
<p>boolean getEven(); 是否为偶</p>
<p>boolean getLast(); 是否最后一个</p>
<p>bolean getOdd();&nbsp;&nbsp; 是否为奇</p>
<p>由于iteratorstatus对象并不是ognl的根对象因此访问需要加上 #访问如下例子:</p>
<p>&lt;s:iterator value=&#8221;{&#8217;dd&#8217;,'bb&#8217;,'cc&#8217;}&#8221; status=&#8221;st&#8221;&gt;</p>
<p>&nbsp;&nbsp; &lt;s:if test=&#8221;#st.odd&#8221;&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;s:property value=&#8221;#st.index&#8221;/&gt;</p>
<p>&nbsp;&nbsp; &lt;/s:if&gt;</p>
<p>&lt;/s:iterator&gt;</p>
<p>&nbsp;</p>
<p>此外:iterator也可以迭代map对象,map对象中有几对key-value 就迭代几次,分别使用<br />
&lt;s:property value=&#8221;key&#8221;/&gt;<br />
&lt;s:property value=&#8221;value&#8221;/&gt;</p>
<p>输出即可.</p>
<img src ="http://www.blogjava.net/cyantide/aggbug/243901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2008-12-02 12:53 <a href="http://www.blogjava.net/cyantide/archive/2008/12/02/243901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webwork action之间跳转</title><link>http://www.blogjava.net/cyantide/archive/2008/07/08/213297.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Tue, 08 Jul 2008 05:08:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2008/07/08/213297.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/213297.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2008/07/08/213297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/213297.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/213297.html</trackback:ping><description><![CDATA[<font style="background-color: #cce8cf">&lt;action name="editxxx"<br />
&nbsp;&nbsp;&nbsp;class="com.xxxAction"<br />
&nbsp;&nbsp;&nbsp;method="editxxx"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;external-ref name="business"&gt;xxxbusiness&lt;/external-ref&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;result name="success" type="chain"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name="actionName"&gt;getxxxList&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name="namespace"&gt;/rota&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/result&gt;<br />
&nbsp;&nbsp;&lt;/action&gt;</font>
 <img src ="http://www.blogjava.net/cyantide/aggbug/213297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2008-07-08 13:08 <a href="http://www.blogjava.net/cyantide/archive/2008/07/08/213297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 使用simple标签模板</title><link>http://www.blogjava.net/cyantide/archive/2008/06/10/206879.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Tue, 10 Jun 2008 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2008/06/10/206879.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/206879.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2008/06/10/206879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/206879.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/206879.html</trackback:ping><description><![CDATA[<p><span>在struts-core-2.06.jar中包含了一些默认的模版文件($ {struts-core-2.06.jar}/template),其中有ajax/simple/xhtml等. </span></p>
<p><br />
<span>查看struts.properties或$ {struts-core-2.06.jar}/org/apache/struts2/default.properties文件，其中有如下配置： <br />
struts.ui.theme=xhtml <br />
struts.ui.templateDir=template <br />
struts.ui.templateSuffix=ftl</span></p>
<p><span>这一段就是关于struts2模版的配置信息，我们可以修改struts.properties文件，将其改成 <br />
struts.ui.theme=simple <br />
struts.ui.templateDir=template <br />
struts.ui.templateSuffix=ftl</span></p>
<p><span>如果没有struts.properties文件，可以修改struts.xml文件，在其中加入如下行</span></p>
<p><span>&lt;constant name="struts.ui.theme" value="simple" /&gt; <br />
&lt;constant name="struts.ui.templateDir" value="template" /&gt; <br />
&lt;constant name="struts.ui.templateSuffix" value="ftl" /&gt; </span></p>
 <img src ="http://www.blogjava.net/cyantide/aggbug/206879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2008-06-10 10:37 <a href="http://www.blogjava.net/cyantide/archive/2008/06/10/206879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2中action跳转到另一个action的方法</title><link>http://www.blogjava.net/cyantide/archive/2008/05/24/202590.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Sat, 24 May 2008 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2008/05/24/202590.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/202590.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2008/05/24/202590.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/202590.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/202590.html</trackback:ping><description><![CDATA[从action1直接跳转到action2,有两种方法:<br /><br />1. 需要保存前一个action的属性信息时使用:<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;result &#160; type= "chain "&gt;action2&lt;/result&gt; <br />2. 不保存前一个action的参数可以用这种方法:<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;result&#160;&#160;&#160;type= "redirect-action "&gt; ActionName &lt;/result&gt;<br /> <img src ="http://www.blogjava.net/cyantide/aggbug/202590.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2008-05-24 14:08 <a href="http://www.blogjava.net/cyantide/archive/2008/05/24/202590.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>