﻿<?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-Bobby-随笔分类-Struts2</title><link>http://www.blogjava.net/bobby/category/41885.html</link><description>幸福的人创造幸福的世界！</description><language>zh-cn</language><lastBuildDate>Fri, 16 Apr 2010 17:48:42 GMT</lastBuildDate><pubDate>Fri, 16 Apr 2010 17:48:42 GMT</pubDate><ttl>60</ttl><item><title>Struts2 注解求助！！！！！！！！</title><link>http://www.blogjava.net/bobby/archive/2010/04/16/318483.html</link><dc:creator>bobby</dc:creator><author>bobby</author><pubDate>Fri, 16 Apr 2010 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/bobby/archive/2010/04/16/318483.html</guid><wfw:comment>http://www.blogjava.net/bobby/comments/318483.html</wfw:comment><comments>http://www.blogjava.net/bobby/archive/2010/04/16/318483.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bobby/comments/commentRss/318483.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bobby/services/trackbacks/318483.html</trackback:ping><description><![CDATA[&nbsp; @Actions( {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Action(value = "/customer", results = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Result(location = "simpleecho.jsp", name = "success"), @Result(location = "simpleecho.jsp", name = "input")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; })<br />
&nbsp;&nbsp;&nbsp; })<br />
是什么意思？尤其是第二个@Result<br />
<br />
写成配置文件形式该怎么写呢？
<img src ="http://www.blogjava.net/bobby/aggbug/318483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bobby/" target="_blank">bobby</a> 2010-04-16 10:33 <a href="http://www.blogjava.net/bobby/archive/2010/04/16/318483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2之OGNL学习</title><link>http://www.blogjava.net/bobby/archive/2009/11/07/301567.html</link><dc:creator>bobby</dc:creator><author>bobby</author><pubDate>Sat, 07 Nov 2009 12:56:00 GMT</pubDate><guid>http://www.blogjava.net/bobby/archive/2009/11/07/301567.html</guid><wfw:comment>http://www.blogjava.net/bobby/comments/301567.html</wfw:comment><comments>http://www.blogjava.net/bobby/archive/2009/11/07/301567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bobby/comments/commentRss/301567.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bobby/services/trackbacks/301567.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;OGNL：&nbsp;Object Graph Navigation Language&nbsp;&nbsp;(see <a href="http://www.ognl.org/" rel="nofollow">http://www.ognl.org/</a> for the full documentation of OGNL).&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Struts2框架使用标准命名上下文来使用OGNL表达式，OGNL表达式处理的顶层对象是Map（通常被称为上下文Map或上下文）。OGNL认为在应用上下文中有一个根对象（或默认对象）。即不需要使用任何特殊的标记就能够获得根对象中的属性，如果要获得其他的对象，则需要使用标记#。<br />
&nbsp;&nbsp;&nbsp;&nbsp;Struts2框架把OGNL context作为我们的ActionContext，并且把值栈（ValueStack）作为OGNL的根对象（ValueStack是多个对象的集合，但是对OGNL来说，它是一个单一的对象）。框架把其他对象和ValueStack一起放到ActionContext中，包括展现application、session和request 上下文的Maps，这些对象同ValueStack一起，共同存在于ActionContext中。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--application<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--session<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context map---|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--value stack(root)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--request<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--parameters<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--attr (searches page, request, session, then application scopes)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Action实例总是被放入ValueStack中，因为Action在vs中，并且vs是OGNL的根对象，所以在访问Action的属性时可以忽略&#8220; # &#8221;标记。但是，在访问ActionContext中的其他对象时必须要使用&#8220;#&#8221;，这样OGNL才能知道我们想要访问的是Actioncontext中的其他对象，而不去根对象中查找。<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<table border="0" cellspacing="2" cellpadding="2" width="500" align="center">
    <tbody>
        <tr>
            <td>访问Action中的一个属性</td>
        </tr>
        <tr>
            <td><span class="code-tag">&lt;s:property value=<span class="code-quote">"postalCode"</span>/&gt;</span></td>
        </tr>
    </tbody>
</table>
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Actioncontext中的其他非根对象属性，可以用&#8220;#&#8221;标记来获得。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span class="code-tag">&lt;s:property value=<span class="code-quote">"#session.mySessionPropKey"</span>/&gt;</span> or<br />
<span class="code-tag">&nbsp;&nbsp;&nbsp;&nbsp;&lt;s:property value=<span class="code-quote">"#session['mySessionPropKey']"</span>/&gt;</span> or<br />
<span class="code-tag">&nbsp;&nbsp;&nbsp;&nbsp;&lt;s:property value=<span class="code-quote">"#request['myRequestPropKey']"</span>/&gt;</span><br />
同样Action可以通过一个静态的方法来获取ActionContext：<br />
Actioncontext.getContext();<br />
ActionContext.getContext().getSession().put(<span class="code-quote">"mySessionPropKey"</span>, mySessionObject);<br />
<h2><a name="OGNL-Collections%28Maps%2CLists%2CSets%29"></a>Collections (Maps, Lists, Sets)</h2>
<p>在框架中会经常遇到处理集合&nbsp;Collections (Maps, Lists, and Sets), 下面列出几个使用select 标签处理集合的列子.&nbsp; <a href="http://www.opensymphony.com/ognl/html/LanguageGuide/collectionConstruction.html" rel="nofollow">OGNL documentation</a> 也包括许多列子.</p>
<p>Syntax for list: {e1,e2,e3}. 这个语法创建了一个包含字符串&#8220;name1&#8221;，&#8220;name2&#8221;和&#8220;name3&#8221;的List，并且选择&#8220;name2&#8221;作为默认值。<br />
<br />
<span class="code-tag">&lt;s:select label=<span class="code-quote">"label"</span> name=<span class="code-quote">"name"</span> list=<span class="code-quote">"{'name1','name2','name3'}"</span> value=<span class="code-quote">"%{'name2'}"</span> /&gt;<br />
<br />
Syntax for map: #{key1:value1,key2:value2}. 这个语法创建了一个Map键值对集合，&#8220;foo&#8221;对应&#8220;foovalue&#8221;，&#8220;bar&#8221;对应&#8220;barvalue&#8221;：<br />
<span class="code-tag"><br />
&lt;s:select label=<span class="code-quote">"label"</span> name=<span class="code-quote">"name"</span> list=<span class="code-quote">"#{'foo':'foovalue', 'bar':'barvalue'}"</span> /&gt;</span><br />
</p>
<p>判断一个元素是否存在于一个集合中，使用in 或 not in 操作。<br />
<span class="code-tag">&lt;s:if test=<span class="code-quote">"'foo' in {'foo','bar'}"</span>&gt;</span><br />
&nbsp;&nbsp; muhahaha<br />
<span class="code-tag">&lt;/s:if&gt;</span><br />
<span class="code-tag">&lt;s:else&gt;</span><br />
&nbsp;&nbsp; boo<br />
<span class="code-tag">&lt;/s:else&gt;</span><br />
<br />
<span class="code-tag">&lt;s:if test=<span class="code-quote">"'foo' not in {'foo','bar'}"</span>&gt;</span><br />
&nbsp;&nbsp; muhahaha<br />
<span class="code-tag">&lt;/s:if&gt;</span><br />
<span class="code-tag">&lt;s:else&gt;</span><br />
&nbsp;&nbsp; boo<br />
<span class="code-tag">&lt;/s:else&gt;</span><br />
<br />
选择集合的一个子集（也叫投影），可以使用通配符：<br />
</p>
<li>? - 所有元素匹配选择逻辑
<li>^ - 只有第一个元素匹配选择逻辑
<li>$ - 只有最后一个元素匹配选择逻辑</li>
<p>例如，获得人的亲属集合中为男性的一个子集</p>
<pre class="code-xml">person.relatives.{? #this.gender == 'male'}
</pre>
<pre class="code-xml">
<h2><a name="OGNL-LambdaExpressions"></a>Lambda Expressions</h2>
<p>OGNL supports basic lamba expression syntax enabling you to write simple functions.</p>
<p>(Dedicated to all you math majors who didn't think you would ever see this one again.)</p>
<p>Fibonacci: if n==0 return 0; elseif n==1 return 1; else return fib(n-2)+fib(n-1);<br />
fib(0) = 0<br />
fib(1) = 1<br />
fib(11) = 89</p>
<div class="panelMacro">
<table class="infoMacro">
    <colgroup><col width="24"><col></colgroup>
    <tbody>
        <tr>
            <td valign="top"><img border="0" alt="" align="absMiddle" src="http://cwiki.apache.org/confluence/images/icons/emoticons/information.gif" width="16" height="16" /></td>
            <td><strong>How the expression works</strong><br />
            <p>The lambda expression is everything inside the square brackets. The #this variable holds the argument to the expression, which in the following example is the number 11 (the code after the square-bracketed lamba expression, <tt>#fib(11)</tt>).</p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div style="border-right-width: 1px; border-top-width: 1px; border-bottom-width: 1px; border-left-width: 1px" class="code panel">
<div class="codeContent panelContent">
<pre class="code-xml"><span class="code-tag">&lt;s:property value=<span class="code-quote">"#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)"</span> /&gt;</span>
</pre>
</div>
</div>
</pre>
</span>
<img src ="http://www.blogjava.net/bobby/aggbug/301567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bobby/" target="_blank">bobby</a> 2009-11-07 20:56 <a href="http://www.blogjava.net/bobby/archive/2009/11/07/301567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>