<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java豆技术站点 &#187; struts2</title>
	<atom:link href="http://javadou.com/tag/struts2/feed/" rel="self" type="application/rss+xml" />
	<link>http://javadou.com</link>
	<description>Java</description>
	<lastBuildDate>Thu, 12 Aug 2010 09:01:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Extjs Tree + JSON + Struts2完整演绎</title>
		<link>http://javadou.com/extjs-tree-json-struts2-java-584/</link>
		<comments>http://javadou.com/extjs-tree-json-struts2-java-584/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 02:32:51 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Struts2]]></category>
		<category><![CDATA[ext]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=584</guid>
		<description><![CDATA[最近尝试用extjs来展示树状菜单。着实花了一番功夫。树状菜单的菜单项需要动态加载，而目前版本的extjs中只支持JSON格式的数据。查了一些资料，决定使用struts2的json-plugin。首先按照例子做了一个，但是结果就是不... ]]></description>
			<content:encoded><![CDATA[<p><span>最近尝试用extjs来展示树状菜单。着实花了一番功夫。树状菜单的菜单项需要动态加载，而目前版本的extjs中只支持JSON格式的数据。查了一些资料，决定使用struts2的json-plugin。首先按照例子做了一个，但是结果就是不成功，界面上只出来了一个js中生成的root节点，不能加载从后台生成的数据。研究后发现是数据格式有问题。使用json-plugin生成的数据格式如下：<br />
{&#8220;cls&#8221;:&#8221;folder&#8221;,&#8221;id&#8221;:10,&#8221;leaf&#8221;:false,&#8221;children&#8221;:[{"cls":"file","id":11,"leaf":true,"children":null,"text":"S600"},{"cls":"file","id":12,"leaf":true,"children":null,"text":"SLK200"}],&#8221;text&#8221;:&#8221;Benz&#8221;}<br />
而extjs需要的数据格式如下：<br />
[{"cls":"folder","id":10,"leaf":false,"children":[{"cls":"file","id":11,"leaf":true,"children":null,"text":"S600"},{"cls":"file","id":12,"leaf":true,"children":null,"text":"SLK200"}],&#8221;text&#8221;:&#8221;Benz&#8221;}]<br />
区别很小，就只相差最外面的两个方括号。但是少了这两个方括号，在json中，含义迥然不同，前者表示一个对象，而后者表示一个数组。而extjs中 tree的dataloader需要的数据必须是一个数组。而这样的数据格式是json-plugin自动生成的，无法改变。所以，我最后放弃了json -plugin，转而使用json-lib来解决这个问题。<br />
1. 下载json-lib, <a href="http://json-lib.sourceforge.net/" target="_blank">http://json-lib.sourceforge.net/</a><br />
2. lib目录下的jar文件清单：<br />
commons-beanutils-1.7.0.jar<br />
commons-collections-3.2.jar<br />
commons-digester-1.6.jar<br />
commons-lang-2.3.jar<br />
commons-logging-1.1.jar<br />
dom4j-1.6.1.jar<br />
ezmorph-1.0.4.jar<br />
freemarker-2.3.8.jar<br />
json-lib-2.2.1-jdk15.jar<br />
log4j-1.2.13.jar<br />
ognl-2.6.11.jar<br />
struts2-core-2.0.11.jar<br />
xml-apis-1.0.b2.jar<br />
xwork-2.0.4.jar</p>
<p>首先配置web.xml<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;web-app version=&#8221;2.4&#8243; xmlns=&#8221;<a href="http://java.sun.com/xml/ns/j2ee" target="_blank">http://java.sun.com/xml/ns/j2ee</a>&#8221;<br />
xmlns:xsi=&#8221;<a href="http://www.w3.org/2001/XMLSchema-instance" target="_blank">http://www.w3.org/2001/XMLSchema-instance</a>&#8221;<br />
xsi:schemaLocation=&#8221;<a href="http://java.sun.com/xml/ns/j2ee" target="_blank">http://java.sun.com/xml/ns/j2ee</a><br />
<a href="http://java.sun.com/xml/ns/j2ee" target="_blank">http://java.sun.com/xml/ns/j2ee</a>/web-app_2_4.xsd&#8221;&gt;<br />
&lt;welcome-file-list&gt;<br />
&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
&lt;/welcome-file-list&gt;<br />
&lt;filter&gt;<br />
&lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt;<br />
&lt;/filter&gt;</p>
<p>&lt;filter-mapping&gt;<br />
&lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;<br />
&lt;/web-app&gt;</p>
<p>然后是struts.xml<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;!DOCTYPE struts PUBLIC<br />
&#8220;-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&#8221;<br />
&#8220;<a href="http://struts.apache.org/dtds/struts-2.0.dtd" target="_blank">http://struts.apache.org/dtds/struts-2.0.dtd</a>&#8220;&gt;</p>
<p>&lt;struts&gt;<br />
&lt;constant name=&#8221;struts.devMode&#8221; value=&#8221;true&#8221;/&gt;<br />
&lt;constant name=&#8221;struts.i18n.encoding&#8221; value=&#8221;UTF-8&#8243;/&gt;<br />
&lt;package name=&#8221;person&#8221; extends=&#8221;struts-default&#8221;&gt;<br />
&lt;action name=&#8221;menus&#8221; method=&#8221;execute&#8221; class=&#8221;com.lab.MenuAction&#8221;&gt;<br />
&lt;result&gt;/menu.jsp&lt;/result&gt;<br />
&lt;/action&gt;<br />
&lt;/package&gt;<br />
&lt;/struts&gt;</p>
<p>3. 树的节点模型（省略了getter，setter)<br />
public class Menu {<br />
private int id;<br />
private String text;<br />
private boolean leaf;<br />
private String cls;<br />
private List&lt;Menu&gt; children;<br />
}</p>
<p>4. action<br />
package com.lab;</p>
<p>import java.util.ArrayList;<br />
import java.util.List;</p>
<p>import net.sf.json.JSONArray;</p>
<p>public class MenuAction {<br />
private String menuString;</p>
<p>private List&lt;Menu&gt; menus;</p>
<p>public String execute() {</p>
<p>menus = new ArrayList&lt;Menu&gt;();</p>
<p>Menu benz = new Menu();<br />
benz.setText(&#8220;Benz&#8221;);<br />
benz.setCls(&#8220;folder&#8221;);<br />
benz.setLeaf(false);<br />
benz.setId(10);<br />
menus.add(benz);</p>
<p>List&lt;Menu&gt; benzList = new ArrayList&lt;Menu&gt;();<br />
benz.setChildren(benzList);</p>
<p>Menu menu;<br />
menu = new Menu();<br />
menu.setText(&#8220;S600&#8243;);<br />
menu.setCls(&#8220;file&#8221;);<br />
menu.setLeaf(true);<br />
menu.setId(11);<br />
benzList.add(menu);<br />
menu = new Menu();<br />
menu.setText(&#8220;SLK200&#8243;);<br />
menu.setCls(&#8220;file&#8221;);<br />
menu.setLeaf(true);<br />
menu.setId(12);<br />
benzList.add(menu);</p>
<p>Menu bmw = new Menu();<br />
bmw.setText(&#8220;BMW&#8221;);<br />
bmw.setCls(&#8220;folder&#8221;);<br />
bmw.setLeaf(false);<br />
bmw.setId(20);<br />
menus.add(bmw);</p>
<p>List&lt;Menu&gt; bmwList = new ArrayList&lt;Menu&gt;();<br />
bmw.setChildren(bmwList);</p>
<p>menu = new Menu();<br />
menu.setText(&#8220;325i&#8221;);<br />
menu.setCls(&#8220;file&#8221;);<br />
menu.setLeaf(true);<br />
menu.setId(21);<br />
bmwList.add(menu);</p>
<p>menu = new Menu();<br />
menu.setText(&#8220;X5&#8243;);<br />
menu.setCls(&#8220;file&#8221;);<br />
menu.setLeaf(true);<br />
menu.setId(22);<br />
bmwList.add(menu);</p>
<p>JSONArray jsonObject = JSONArray.fromObject(menus);<br />
try {<br />
menuString = jsonObject.toString();<br />
} catch (Exception e) {<br />
menuString = &#8221;ss&#8221;;<br />
}</p>
<p>return &#8221;success&#8221;;<br />
}</p>
<p>public String getMenuString() {<br />
return menuString;<br />
}</p>
<p>public void setMenuString(String menuString) {<br />
this.menuString = menuString;<br />
}<br />
}</p>
<p>5. menu.jsp<br />
&lt;%@ taglib prefix=&#8221;s&#8221; uri=&#8221;/struts-tags&#8221; %&gt;<br />
&lt;s:property value=&#8221;menuString&#8221; escape=&#8221;false&#8221;/&gt;</p>
<p>6. html页面和js<br />
我使用的就是extjs的example中的reorder.html和reorder.js，更改了reorder.js中treeloader的dataurl： menus.action<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=iso-8859-1&#8243;&gt;<br />
&lt;title&gt;Reorder TreePanel&lt;/title&gt;<br />
&lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;extjs/resources/css/ext-all.css&#8221; /&gt;</p>
<p>&lt;!&#8211; GC &#8211;&gt;<br />
&lt;!&#8211; LIBS &#8211;&gt;<br />
&lt;script type=&#8221;text/javascript&#8221; src=&#8221;extjs/adapter/ext/ext-base.js&#8221;&gt;&lt;/script&gt;<br />
&lt;!&#8211; ENDLIBS &#8211;&gt;</p>
<p>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;extjs/ext-all.js&#8221;&gt;&lt;/script&gt;<br />
&lt;script type=&#8221;text/javascript&#8221; src=&#8221;reorder.js&#8221;&gt;&lt;/script&gt;</p>
<p>&lt;!&#8211; Common Styles for the examples &#8211;&gt;<br />
&lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;extjs/resources/css/example.css&#8221; /&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;script type=&#8221;text/javascript&#8221; src=&#8221;../examples.js&#8221;&gt;&lt;/script&gt;&lt;!&#8211; EXAMPLES &#8211;&gt;<br />
&lt;h1&gt;Drag and Drop ordering in a TreePanel&lt;/h1&gt;<br />
&lt;p&gt;This example shows basic drag and drop node moving in a tree. In this implementation there are no restrictions and<br />
anything can be dropped anywhere except appending to nodes marked &amp;quot;leaf&amp;quot; (the files). &lt;br&gt;&lt;/p&gt;<br />
&lt;p&gt;Drag along the edge of the tree to trigger auto scrolling while performing a drag and drop.&lt;/p&gt;<br />
&lt;p&gt;In order to demonstrate drag and drop insertion points, sorting was &lt;b&gt;not&lt;/b&gt; enabled.&lt;/p&gt;<br />
&lt;p&gt;The data for this tree is asynchronously loaded with a JSON TreeLoader.&lt;/p&gt;<br />
&lt;p&gt;The js is not minified so it is readable. See &lt;a href=&#8221;reorder.js&#8221;&gt;reorder.js&lt;/a&gt;.&lt;/p&gt;</p>
<p>&lt;div id=&#8221;tree-div&#8221; style=&#8221;overflow:auto; height:300px;width:250px;border:1px solid #c3daf9;&#8221;&gt;&lt;/div&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>js:<br />
/*<br />
* Ext JS Library 2.0.1<br />
* Copyright(c) 2006-2008, Ext JS, LLC.<br />
* licensing@extjs.com<br />
*<br />
* <a href="http://extjs.com/license" target="_blank">http://extjs.com/license</a><br />
*/</p>
<p>Ext.onReady(function(){<br />
// shorthand<br />
var Tree = Ext.tree;</p>
<p>var tree = new Tree.TreePanel({<br />
el:&#8217;tree-div&#8217;,<br />
autoScroll:true,<br />
animate:true,<br />
enableDD:true,<br />
containerScroll: true,<br />
loader: new Tree.TreeLoader({<br />
dataUrl:&#8217;<a href="http://localhost:8080/lab/menus.action" target="_blank">http://localhost:8080/lab/menus.action</a>&#8216;<br />
})<br />
});</p>
<p>// set the root node<br />
var root = new Tree.AsyncTreeNode({<br />
text: &#8217;Ext JS&#8217;,<br />
draggable:false,<br />
id:&#8217;source&#8217;<br />
});<br />
tree.setRootNode(root);</p>
<p>// render the tree<br />
tree.render();<br />
root.expand();<br />
});</span></p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/extjs-tree-json-struts2-java-584/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2 REST插件 安装和使用</title>
		<link>http://javadou.com/struts2-rest-569/</link>
		<comments>http://javadou.com/struts2-rest-569/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 09:49:10 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/struts2-rest%e6%8f%92%e4%bb%b6-%e5%ae%89%e8%a3%85%e5%92%8c%e4%bd%bf%e7%94%a8-569/</guid>
		<description><![CDATA[注意：本插件仅适用于Struts 2.1.1或更高的版本。 特性 用法2.1 定制ContentTypeHandlers 2.2 关于struts.xml 示例 配置 安装 资源 此REST插件简化了人们和电脑客户端对REST风格资源的访问。其目标是100%实现和Ruby on Rails REST URL风... ]]></description>
			<content:encoded><![CDATA[<p>注意：本插件仅适用于Struts 2.1.1或更高的版本。</p>
<ol>
<li>特性</li>
<li>用法2.1 定制ContentTypeHandlers<br />
2.2 关于struts.xml</li>
<li>示例</li>
<li>配置</li>
<li>安装</li>
<li>资源</li>
</ol>
<p>此REST插件简化了人们和电脑客户端对REST风格资源的访问。其目标是100%实现和Ruby on Rails REST URL风格相兼容的，并且可以免除使用XML作为资源的开发模式。它基于Convention Plugin来支持对action和result的自动配置。</p>
<p>此Rest风格的action映射强制兼容Ruby-On-Rails的风格映射。如果方法未被指定（通过“！”或者“method:”前缀），那 么将基于ReST风格的约定（通过检查URL和HTTP方法）进行猜测。这里特别说明的是，此插件和codebehind plugin一起也可以正常工作，因此，不再需要使用基于XML的配置文件。</p>
<p>此映射支持如下参数：</p>
<p>struts.mapper.idParameterName &#8211; 如果设置，则它的值将被作为保存id的参数名，然后id将被从action名称中移除。不管是否指定了相关方法，此映射都会试图从url中移除标识符并将它作为一个参数保存。<br />
struts.mapper.indexMethodName &#8211; 在没有id参数的情况下，通过GET请求调用的方法名。默认为index。<br />
struts.mapper.getMethodName &#8211; 在具有id参数的情况下，通过GET请求调用的方法名。默认为show。<br />
struts.mapper.postMethodName &#8211; 在没有id参数的情况下，通过POST请求调用的方法名。默认为create。<br />
struts.mapper.putMethodName &#8211; 在具有id参数的情况下，通过PUT请求调用的方法名。默认为update。<br />
struts.mapper.deleteMethodName &#8211; 在具有id参数的情况下，通过DELETE请求调用的方法名。默认为destory。<br />
struts.mapper.editMethodName &#8211; 在具有id参数且指定了“edit”视图的情况下，通过GET请求调用的方法名。默认为edit。<br />
struts.mapper.newMethodName &#8211; 在没有id参数且指定了“new”视图的情况下，通过GET请求调用的方法名。默认为editNew。<br />
下列URL将调用Action的相关方法如下：</p>
<p>GET: /movies =&gt; method=&#8221;index&#8221;<br />
GET: /movies/Thrillers =&gt; method=&#8221;show&#8221;, id=&#8221;Thrillers&#8221;<br />
GET: /movies/Thrillers;edit =&gt; method=&#8221;edit&#8221;, id=&#8221;Thrillers&#8221;<br />
GET: /movies/Thrillers/edit =&gt; method=&#8221;edit&#8221;, id=&#8221;Thrillers&#8221;<br />
GET: /movies/new =&gt; method=&#8221;editNew&#8221;<br />
POST: /movies =&gt; method=&#8221;create&#8221;<br />
PUT: /movies/Thrillers =&gt; method=&#8221;update&#8221;, id=&#8221;Thrillers&#8221;<br />
DELETE: /movies/Thrillers =&gt; method=&#8221;destroy&#8221;, id=&#8221;Thrillers&#8221;<br />
为了模拟HTTP方法的PUT和DELETE请求，因为HTML并不支持，我们将使用一个叫做“_method”的HTTP参数。</p>
<p>或者，使用下表的表示方式：</p>
<table border="0">
<tbody>
<tr>
<th>HTTP method</th>
<th>URI</th>
<th>Class.method</th>
<th>parameters</th>
</tr>
<tr>
<td>GET</td>
<td>/movie</td>
<td>Movie.index</td>
<td></td>
</tr>
<tr>
<td>POST</td>
<td>/movie</td>
<td>Movie.create</td>
<td></td>
</tr>
<tr>
<td>PUT</td>
<td>/movie/Thrillers</td>
<td>Movie.update</td>
<td>id=&#8221;Thrillers&#8221;</td>
</tr>
<tr>
<td>DELETE</td>
<td>/movie/Thrillers</td>
<td>Movie.destroy</td>
<td>id=&#8221;Thrillers&#8221;</td>
</tr>
<tr>
<td>GET</td>
<td>/movie/Thrillers</td>
<td>Movie.show</td>
<td>id=&#8221;Thrillers&#8221;</td>
</tr>
<tr>
<td>GET</td>
<td>/movie/Thrillers/edit</td>
<td>Movie.edit</td>
<td>id=&#8221;Thrillers&#8221;</td>
</tr>
<tr>
<td>GET</td>
<td>/movie/new</td>
<td>Movie.editNew</td>
<td></td>
</tr>
</tbody>
</table>
<p>除了作为一个REST风格的URL映射器以外，此插件还对于multiple content types、通过URL扩展名的可切换性提供了内建的支持。这样，一个单一的资源就能够被作为一个multiple content types暴露出去，而不需要其他额外的工作。</p>
<p>例如，通过暴露一个“orders”资源，客户端可以立即通过如下方式进行访问：</p>
<p><a href="http://my.company.com/myapp/orders/1">http://my.company.com/myapp/orders/1</a><br />
<a href="http://my.company.com/myapp/orders/1.xml">http://my.company.com/myapp/orders/1.xml</a><br />
<a href="http://my.company.com/myapp/orders/1.xhtml">http://my.company.com/myapp/orders/1.xhtml</a><br />
<a href="http://my.company.com/myapp/orders/1.json">http://my.company.com/myapp/orders/1.json</a></p>
<p>此REST插件自动处理序列号和反序列化以及相应的格式化。</p>
<p><strong>一、特性</strong><br />
完全实现 Ruby on Rails 的REST风格URL<br />
支持免XML开发，不需要注解<br />
内建序列号和反序列化支持，以支持XML和JSON<br />
自动错误处理<br />
针对HTTP响应的类型安全设置<br />
自动有条件的GET支持</p>
<p><strong>二、用法</strong><br />
在配置的包（package）中创建以“Controller”结尾的Java对象。这里的 “Controller”后缀用于区别REST action和普通的Struts2 action。尽管这完全是可选的，以及它们的功能完全相同。现在，加入方法即可处理各种请求。举例说明，下面的资源action将支持使用GET和 PUT请求访问/orders/34资源：</p>
<p>package org.apache.struts2.rest.example;</p>
<p>public class OrdersController implements ModelDriven {</p>
<p>private OrderManager orderManager;<br />
private String id;<br />
private Order model;</p>
<p>// Handles /orders/{id} GET requests<br />
public HttpHeaders show() {<br />
model = orderManager.findOrder(id);<br />
return new DefaultHttpHeaders(&#8220;show&#8221;)<br />
.withETag(model.getUniqueStamp())<br />
.lastModified(model.getLastModified());<br />
}</p>
<p>// Handles /orders/{id} PUT requests<br />
public String update() {<br />
orderManager.updateOrder(model);<br />
return &#8220;update&#8221;;<br />
}</p>
<p>// getters and setters<br />
}</p>
<p>在这个例子中，使用了ModelDriven 接口，来确保只有模型——这里的Order对象，被返回给客户端。否则，OrdersController 对象将被整个序列化。</p>
<p>你也许在想为什么show()方法返回了一个HttpHeaders 对象，而update()方法返回了预期的结果代码字符串。REST插件添加了对action方法的支持，对于那些通过响应有更多控制的action，返 回HttpHeaders 对象是一种方式。在本例中，我们想要确保响应包括ETag 头和一个最近修改日期，以便信息可以被客户端正确的缓存。HttpHeaders 对象是一个方便的方式，可以在保证在类型安全的情况下控制响应。</p>
<p>而且，请注意，我们没有在上述任何一个方法中，返回通常的“success”结果码。这允许我们使用Codebehind Plugin插件的特性，当访问扩展名为.xhtml的资源时，以更加直观的方式来选择结果模板去处理。在本例中，我们可以通过为相应的方法创建 /orders-show.jsp 和/orders-update.jsp页面，来提供一个定制化的XHTML 资源视图。</p>
<p><strong>2.1 定制ContentTypeHandlers</strong><br />
如果你需要处理不被默认处理器支持的扩展名时，你可以创建你自己的ContentTypeHandler 实现，并在struts.xml中进行定义即可。</p>
<pre>&lt;bean name="yaml" type="org.apache.struts2.rest.handler.ContentTypeHandler" class="com.mycompany.MyYamlContentHandler" /&gt;</pre>
<p>如果内建的内容类型处理器无法满足你的需要，那么你可以提供另一个处理器，覆盖对任何扩展名的默认处理方式，并使用它自己的别名进行声明，例如：</p>
<p>&lt;bean name=&#8221;myXml&#8221; type=&#8221;org.apache.struts2.rest.handler.ContentTypeHandler&#8221; class=&#8221;com.mycompany.MyXmlContentHandler&#8221; /&gt;</p>
<p>然后，只需要告知REST插件使用你自己的处理器，去覆盖特定扩展的处理器即可。在struts.properties文件中，可以做如下配置：</p>
<p>struts.rest.handlerOverride.xml=myXml</p>
<p><strong>2.2 关于struts.xml<br />
</strong>配置Struts以使用REST action映射器：</p>
<pre>&lt;constant name="struts.mapper.class" value="rest" /&gt;</pre>
<p>因为REST插件使用Convention plugin，需要在Struts.xml中进行相关设置：</p>
<pre>&lt;constant name="struts.convention.action.suffix" value="Controller"/&gt;
&lt;constant name="struts.convention.action.mapAllMatches" value="true"/&gt;
&lt;constant name="struts.convention.default.parent.package" value="rest-default"/&gt;</pre>
<p>对于上述例子而言，package设置如下：</p>
<p>&lt;constant name=&#8221;struts.convention.package.locators&#8221; value=&#8221;example&#8221;/&gt;</p>
<p><strong>三、示例</strong><br />
此插件是随struts2-rest-showcase 应用程序一起发布的，用以演示一个简单的REST web应用程序。</p>
<p>该示例和不同于一般，控制器将被映射到一个关联的HTTP（PUT,DELETE）方法。</p>
<p>看下图可以让你更容易的理解REST的工作方式：</p>
<p><img src="http://photos-e.ak.fbcdn.net/hphotos-ak-snc1/hs272.snc1/9934_177315120680_142079595680_4129428_1914640_n.jpg" alt="" /></p>
<p><strong>四、配置<br />
</strong>配置可以定制，具体可以查看开发指南文档。要获得更多的配置项信息，可以查看Convention Plugin的文档。</p>
<table border="0">
<tbody>
<tr>
<th>设置</th>
<th>描述</th>
<th>默认</th>
<th>可能值</th>
</tr>
<tr>
<td><tt>struts.rest.handlerOverride.EXTENSION</tt></td>
<td>处理EXTENSION 值的<tt>ContentTypeHandler</tt> 实现的别名</td>
<td>N/A</td>
<td>任何声明了的<tt>ContentTypeHandler实现的别名</tt></td>
</tr>
<tr>
<td><tt>struts.rest.defaultExtension</tt></td>
<td>当没有在request中显示指定的时候默认使用扩展类型</td>
<td><tt>xml</tt></td>
<td>任意扩展名</td>
</tr>
<tr>
<td><tt>struts.rest.validationFailureStatusCode</tt></td>
<td>校验失败后返回的HTTP状态码</td>
<td><tt>400</tt></td>
<td>任意HTTP的数字状态码</td>
</tr>
</tbody>
</table>
<p><strong>五、安装</strong><br />
复制插件的jar包到应用程序的/WEB-INF/lib 即可。此插件依赖于Convention Plugin，因此，如果没有类似于Maven2那样的支持传递依赖的构建系统的话，你可能也需要加入Convention Plugin的jar包。</p>
<p><strong>六、资源<br />
</strong><a href="http://www.b-simple.de/documents">http://www.b-simple.de/documents</a> &#8211; 精短的RESTful Rails 教程(PDF格式, 有多种语言)<br />
RESTful Web Services &#8211; 来自 O&#8217;Reilly 的一本书<br />
Go Light with Apache Struts 2 and REST &#8211; Don Brown 在 ApacheCon US 2008 年会上的幻灯片简报</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-rest-569/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>struts2 rest freemarker实战项目下载struts2 教程 rest plugin</title>
		<link>http://javadou.com/struts2-rest-freemarker-struts2-rest-plugin-567/</link>
		<comments>http://javadou.com/struts2-rest-freemarker-struts2-rest-plugin-567/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 01:18:50 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Freemarker]]></category>
		<category><![CDATA[Guice]]></category>
		<category><![CDATA[Struts2]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/struts2-rest-freemarker%e5%ae%9e%e6%88%98%e9%a1%b9%e7%9b%ae%e4%b8%8b%e8%bd%bdstruts2-%e6%95%99%e7%a8%8b-rest-plugin-567/</guid>
		<description><![CDATA[网站上很多网友都看了前面的那篇文章Struts 2 的REST 支持基础教程 收获很多 但是想现在一个项目来实战一下，应广大网友的支持 我把在公司的一个项目(struts2 rest freemarker实战项目)分享一下给大家，里面用了Google Guic... ]]></description>
			<content:encoded><![CDATA[<p>网站上很多网友都看了前面的那篇文章<a href="/struts2-rest-for-183/" target="_blank">Struts 2 的REST 支持基础教程</a><br />
收获很多 但是想现在一个项目来实战一下，应广大网友的支持 我把在公司的一个项目(struts2 rest freemarker实战项目)分享一下给大家，里面用了Google Guice还有struts2 rest插件 完全不需要配置任何的文件就可以写一个action 很方便 项目当中还实用了freemarker很多技术都在里面哦 大家一定要珍惜这个项目啊 欢迎留言交流！</p>
<p>下载<a href="http://60.12.73.46/down/upload/lovebay-gift.rar">struts2 rest freemarker</a></p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-rest-freemarker-struts2-rest-plugin-567/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Struts2标签iterator介绍，iterator循环标签</title>
		<link>http://javadou.com/struts2-iterator-iterator-each-565/</link>
		<comments>http://javadou.com/struts2-iterator-iterator-each-565/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 02:53:45 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[recommend]]></category>
		<category><![CDATA[iterator]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=565</guid>
		<description><![CDATA[用于遍历集合（java.util.Collection）或枚举值（java.util.Iterator）。 参数： 名称 必需 默认 类型 描述 status 否 String 如果设置此参数，一个IteratorStatus的实例将会压入每个遍历的堆栈 value 否 Object/String 要遍历的可枚举的... ]]></description>
			<content:encoded><![CDATA[<div>
<p>用于遍历集合（java.util.Collection）或枚举值（java.util.Iterator）。</p>
<p>参数：</p>
<table border="0" cellspacing="0" cellpadding="4">
<tbody>
<tr>
<td>名称</td>
<td>必需</td>
<td>默认</td>
<td>类型</td>
<td>描述</td>
</tr>
<tr>
<td>status</td>
<td>否</td>
<td></td>
<td>String</td>
<td>如果设置此参数，一个IteratorStatus的实例将会压入每个遍历的堆栈</td>
</tr>
<tr>
<td>value</td>
<td>否</td>
<td></td>
<td>Object/String</td>
<td>要遍历的可枚举的（iteratable）数据源，或者将放入新列表（List）的对象</td>
</tr>
<tr>
<td>id</td>
<td>否</td>
<td></td>
<td>Object/String</td>
<td>用来标识元素的id。在UI和表单中为HTML的id属性</td>
</tr>
</tbody>
</table>
<p>例子：</p>
<div>&lt;%@ page contentType=&#8221;text/html; charset=UTF-8&#8243; %&gt;<br />
&lt;%@ page import=&#8221;java.util.List&#8221; %&gt;<br />
&lt;%@ page import=&#8221;java.util.ArrayList&#8221; %&gt;<br />
&lt;%@ taglib prefix=&#8221;s&#8221; uri=&#8221;/struts-tags&#8221; %&gt;</p>
<p>&lt;!DOCTYPE HTML PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221;&gt;<br />
&lt;%<br />
List list = new ArrayList();<br />
list.add(&#8220;Max&#8221;);<br />
list.add(&#8220;Scott&#8221;);<br />
list.add(&#8220;Jeffry&#8221;);<br />
list.add(&#8220;Joe&#8221;);<br />
list.add(&#8220;Kelvin&#8221;);<br />
request.setAttribute(&#8220;names&#8221;, list);<br />
%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Iterator&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h3&gt;Names: &lt;/h3&gt;<br />
&lt;!&#8211;<br />
1、此处的空property元素用于获得当前iterator的值<br />
2、status被设成stuts，在iterator的里面就可以通过#stuts取得IteratorStatus的对象。 IteratorStatus类包含当前序号信息，如是否第一个或最后一个，是否为奇数序号。这些信息在我们做格式化的时候，显得非常有用。<br />
&#8211;&gt;<br />
&lt;ol&gt;<br />
&lt;s:iterator value=&#8221;#request.names&#8221; status=&#8221;stuts&#8221;&gt;<br />
&lt;s:if test=&#8221;#stuts.odd == true&#8221;&gt;<br />
&lt;li&gt;White &lt;s:property /&gt;&lt;/li&gt;<br />
&lt;/s:if&gt;<br />
&lt;s:else&gt;<br />
&lt;li style=&#8221;background-color:gray&#8221;&gt;&lt;s:property /&gt;&lt;/li&gt;<br />
&lt;/s:else&gt;<br />
&lt;/s:iterator&gt;<br />
&lt;/ol&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</div>
</div>
<p>在struts2中,iterator标签是很好用的,但也要注意一下.举个例子,<br />
如果要在每行中只显示两条记录,这个经常用到的例子来的了，可以这样用:<br />
&lt;table width=&#8221;800px&#8221; align=&#8221;center&#8221;&gt;<br />
&lt;tr&gt;<br />
&lt;s:iterator value=&#8221;songs&#8221; status=&#8221;st&#8221;&gt;<br />
&lt;td&gt;<br />
&lt;input type=&#8221;checkbox&#8221; name=&#8221;songIds&#8221; id=&#8221;&lt;s:property value=&#8217;id&#8217;/&gt;&#8221; value=&#8221;&lt;s:property value=&#8217;id&#8217;/&gt;&#8221;&gt;&lt;label for=&#8221;&lt;s:property value=&#8217;id&#8217;/&gt;&#8221;&gt;</p>
<p>&lt;s:property value=&#8221;name&#8221;/&gt;<br />
&lt;/td&gt;<br />
&lt;s:if test=&#8221;#st.modulus(2)==0&#8243;&gt;<br />
&lt;s:if test=&#8221;#st.last&#8221;&gt;<br />
&lt;/tr&gt;&lt;/s:if&gt;<br />
&lt;s:else&gt;<br />
&lt;/tr&gt;&lt;tr&gt;&lt;/s:else&gt;<br />
&lt;/s:if&gt;<br />
&lt;/s:iterator&gt;<br />
&lt;/table&gt;<br />
这里无非就是要注意   &lt;s:if test=&#8221;#st.modulus(2)==0&#8243;&gt;<br />
来判断整除2是否为0,(也可以用&lt;s:if test=&#8221;#st.getIndex()%2==0)<br />
并且注意如下的使用 #st.last,判断是否到了最后一条记录,并且注意:<br />
iterator标签有如下方法：<br />
boolean isEven() 当前迭代元素索引是否为偶数；<br />
boolean isOdd() 当前迭代元素索引是否为奇数；<br />
boolean isLast() 是否为最后一条元素；<br />
boolean isFirst() 是否为第一条元素。<br />
有以上元素，那么判断何时加入tr就非常方便。</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-iterator-iterator-each-565/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>struts 整合flex 的一个简单示例(使用Httpservice)</title>
		<link>http://javadou.com/flex-struts-httpservice-demo-546/</link>
		<comments>http://javadou.com/flex-struts-httpservice-demo-546/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 02:42:37 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[struts]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=546</guid>
		<description><![CDATA[struts 整合flex 的一个简单示例(使用Httpservice) 关于在Eclipse下 flex整合java的配置请参考： http://aaacd.blog.hexun.com/15758049_d.html 这里是一个flex整合struts的一个基本的例子 1. testFlex10.mxml &60;?xml version="1.0" encoding="utf-8"?&62; &6... ]]></description>
			<content:encoded><![CDATA[<p>struts 整合flex 的一个简单示例(使用Httpservice)<br />
关于在Eclipse下 flex整合java的配置请参考： http://aaacd.blog.hexun.com/15758049_d.html</p>
<p>这里是一个flex整合struts的一个基本的例子</p>
<p>1. testFlex10.mxml</p>
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="absolute"
    backgroundColor="#FFFFFF"
    backgroundAlpha="0" horizontalCenter="true" &gt;
&lt;mx:HTTPService id="info" url="test.do"&gt;
&lt;mx:request&gt;
&lt;username&gt;
    {userId.text}
&lt;/username&gt;
&lt;userpwd&gt;
    {password.text}
&lt;/userpwd&gt;
&lt;/mx:request&gt;
&lt;/mx:HTTPService&gt;
&lt;mx:TitleWindow id ="loginWindow" xmlns:mx="http://www.adobe.com/2006/mxml" title="Logon" x="350" y="80"&gt;
&lt;mx:Form&gt;
&lt;mx:FormItem label="LUserId" required="true"&gt;
&lt;mx:TextInput id="userId" width="150"&gt;
&lt;/mx:TextInput&gt;
&lt;/mx:FormItem&gt;
&lt;mx:FormItem label="LPassword" required="true"&gt;
&lt;mx:TextInput id="password"  width="150"/&gt;
&lt;/mx:FormItem&gt;
&lt;mx:FormItem&gt;
&lt;mx:HBox horizontalGap="30"&gt;
&lt;mx:Button label="Logon" click="info.send();" /&gt;
&lt;mx:Button label="Cancel" click="info.send();"/&gt;
&lt;/mx:HBox&gt;
&lt;/mx:FormItem&gt;
&lt;/mx:Form&gt;
&lt;/mx:TitleWindow&gt;
&lt;mx:DataGrid dataProvider="{info.lastResult.userinfo.user}" width="60%" x="160" y="300" &gt;
&lt;mx:columns&gt;
&lt;mx:Array&gt;
&lt;mx:DataGridColumn headerText="姓名" dataField="username"/&gt;
&lt;mx:DataGridColumn headerText="密码" dataField="userpwd"/&gt;
&lt;mx:DataGridColumn headerText="邮件" dataField="useremail"/&gt;
&lt;mx:DataGridColumn headerText="年龄" dataField="userage"/&gt;
&lt;/mx:Array&gt;
&lt;/mx:columns&gt;
&lt;/mx:DataGrid&gt;
&lt;/mx:Application&gt;</pre>
<p>核心代码：</p>
<pre>&lt;mx:HTTPService id="info" url="test.do"&gt;
&lt;mx:request&gt;
&lt;username&gt;
    {userId.text}
&lt;/username&gt;
&lt;userpwd&gt;
    {password.text}
&lt;/userpwd&gt;
&lt;/mx:request&gt;
&lt;/mx:HTTPService&gt;</pre>
<p>以及</p>
<p>dataProvider=&#8221;{info.lastResult.userinfo.user}&#8221;</p>
<p>2.struts.config.xml</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"&gt;
&lt;struts-config&gt;
  &lt;data-sources /&gt;
  &lt;form-beans &gt;
    &lt;form-bean name="testForm" type="com.yourcompany.struts.form.TestForm" /&gt;
  &lt;/form-beans&gt;
  &lt;global-exceptions /&gt;
  &lt;global-forwards /&gt;
  &lt;action-mappings &gt;
    &lt;action
      attribute="testForm"
      input="/form/test.jsp"
      name="testForm"
      path="/test"
      scope="request"
      type="com.yourcompany.struts.action.TestAction" &gt;
      &lt;forward name="success" path="/MyJsp.jsp"&gt;&lt;/forward&gt;
&lt;/action&gt;
  &lt;/action-mappings&gt;
  &lt;message-resources parameter="com.yourcompany.struts.ApplicationResources" /&gt;
&lt;/struts-config&gt;</pre>
<p>3.Action: TestAction.java</p>
<pre>package com.yourcompany.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.yourcompany.struts.form.TestForm;
public class TestAction extends Action {
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  TestForm testForm = (TestForm) form;// TODO Auto-generated method stub
  String name = testForm.getUsername();
  System.out.println("fadf : " + name);
  return (mapping.findForward("success"));
 }
}</pre>
<p>4. MyJsp.jsp</p>
<pre>&lt;%@page import="
                java.util.List"%&gt;
&lt;%
response.setContentType("text/xml");
out.println("&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;");
out.println("&lt;userinfo&gt;");
        out.println("&lt;user userId=\""+3123+"\"&gt;");
        out.println("&lt;username&gt;"+42314+"&lt;/username&gt;");
        out.println("&lt;userpwd&gt;"+3123+"&lt;/userpwd&gt;");
        out.println("&lt;useremail&gt;"+4231+"&lt;/useremail&gt;");
        out.println("&lt;userage&gt;"+2+"&lt;/userage&gt;");
        out.println("&lt;regdate&gt;"+4231+"&lt;/regdate&gt;");
        out.println("&lt;/user&gt;");
out.println("&lt;/userinfo&gt;");
%&gt;</pre>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/adriano86426/archive/2009/02/23/3928454.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/flex-struts-httpservice-demo-546/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2遍历List时输出Index</title>
		<link>http://javadou.com/struts2-list-index-535/</link>
		<comments>http://javadou.com/struts2-list-index-535/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 02:04:28 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/struts2%e9%81%8d%e5%8e%86list%e6%97%b6%e8%be%93%e5%87%baindex-535/</guid>
		<description><![CDATA[在循环中我们常常需要索引值 很多朋友不知道如何在struts2中得到，在Struts2架构中，输出列表时如果我们相同时输出该记录的index，只需在迭代器中定义status=”idx”，然后就可以使用idx.index取值了。 &60;!– 遍历结果... ]]></description>
			<content:encoded><![CDATA[<p>在循环中我们常常需要索引值 很多朋友不知道如何在struts2中得到，在Struts2架构中，输出列表时如果我们相同时输出该记录的index，只需在迭代器中定义status=”idx”，然后就可以使用idx.index取值了。<br />
&lt;!– 遍历结果集 begin –&gt;</p>
<p>&lt;s:iterator value=”rentRefList” status=”idx”&gt;<br />
&lt;tr height=”25″ align=”center” bgcolor=”white”&gt;<br />
&lt;td bgcolor=”#f7f9ff”&gt;<br />
&lt;s:property value=”#idx.index+1″ /&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/s:iterator&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-list-index-535/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>让Struts2+ExtJS支持多语言</title>
		<link>http://javadou.com/struts2-extjs-more-language-536/</link>
		<comments>http://javadou.com/struts2-extjs-more-language-536/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 02:04:28 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[Web开发]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/%e8%ae%a9struts2extjs%e6%94%af%e6%8c%81%e5%a4%9a%e8%af%ad%e8%a8%80-536/</guid>
		<description><![CDATA[其实很简单就是几行代码就可以了 secondform = new Ext.Panel({ id : &8216;tab2&8242;, title : &8216;&60;s:text name=&8221;XXX&8221;/&62;&8217;, ) 说明：Struts2支持多语言非常方便，只要写好对应的资源文件就可以了。ExtJS的多语言很麻... ]]></description>
			<content:encoded><![CDATA[<p>其实很简单就是几行代码就可以了<br />
secondform = new Ext.Panel({<br />
id : &#8216;tab2&#8242;,<br />
title : &#8216;&lt;s:text name=&#8221;XXX&#8221;/&gt;&#8217;,<br />
)</p>
<p>说明：Struts2支持多语言非常方便，只要写好对应的资源文件就可以了。ExtJS的多语言很麻烦，和Struts2配合起来就非常好了。</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-extjs-more-language-536/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2标签教程 标签</title>
		<link>http://javadou.com/struts2-tag-s-propert-502/</link>
		<comments>http://javadou.com/struts2-tag-s-propert-502/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 05:54:06 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[s:property标签]]></category>
		<category><![CDATA[struts.xml]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=502</guid>
		<description><![CDATA[Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文... ]]></description>
			<content:encoded><![CDATA[<p>Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文中将介绍Action标签、Bean标签、Data标签、 Include标签、Param标签、Set标签、Text标签、Property标签等标签。</p>
<p>代码下载:<br />
<script type="text/javascript">// <![CDATA[
  google_ad_client = "pub-9439928162046667"; /* 468x15, 创建于 09-11-1 */ google_ad_slot = "8400307026"; google_ad_width = 468; google_ad_height = 15;
// ]]&gt;
// ]]&gt;</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script type="text/javascript">// <![CDATA[
google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);
// ]]&gt;</script><ins><ins></ins></ins><br />
<a href="http://60.12.73.46/upload/Struts2DataTags.rar">Struts2DataTags</a></p>
<p>七、&lt;s:property&gt;标签<br />
Property顾名思义，可以与&lt;s:bean&gt;标签结合使用，一个是给bean赋值，一个是从bean中读取值。直接来看示例：<br />
1．WebRoot\pages\dataTags\propertyTag.jsp<br />
&lt;%@ page contentType=&#8221;text/html; charset=GBK&#8221; %&gt;<br />
&lt;%@ taglib prefix=&#8221;s&#8221; uri=&#8221;/struts-tags&#8221; %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Property Tag 示例&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h2&gt;Property Tag 示例&lt;/h2&gt;<br />
&lt;!&#8211; Example to pick the value through bean class &#8211;&gt;<br />
&lt;s:bean name=&#8221;com.sterning.companyName&#8221; id=&#8221;uid&#8221;&gt;<br />
&lt;s:param name=&#8221;name&#8221;&gt;sterning&lt;/s:param&gt;<br />
&lt;s:property value=&#8221;%{name}&#8221; /&gt;&lt;br&gt;<br />
&lt;/s:bean&gt;<br />
&lt;!&#8211; Default value &#8211;&gt;<br />
&lt;s:property value=&#8221;name&#8221; default=&#8221;Default Value&#8221; /&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>2．Bean<br />
当然这里用到了Bean. com\sterning\ companyName.java，代码如下：<br />
package com.sterning;<br />
public class companyName {<br />
private String name;<br />
public void setName(String name){<br />
this.name =name ;<br />
}<br />
public String getName(){<br />
return name;<br />
}<br />
}</p>
<p>3．src&#8221;com&#8221;sterning&#8221; propertyTag.java<br />
进行页面跳转</p>
<p>package com.sterning;<br />
import com.opensymphony.xwork2.ActionSupport;<br />
public class propertyTag extends ActionSupport {<br />
public String execute() throws Exception{<br />
return SUCCESS;<br />
}<br />
}</p>
<p>4．Struts.xml配置<br />
&lt;action name=&#8221;propertyTag&#8221;&gt;<br />
&lt;result&gt;/pages/dataTags/propertyTag.jsp&lt;/result&gt;<br />
&lt;/action&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-tag-s-propert-502/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Struts2标签教程之-Set标签</title>
		<link>http://javadou.com/struts2-tag-set-501/</link>
		<comments>http://javadou.com/struts2-tag-set-501/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 05:51:34 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[Set标签]]></category>
		<category><![CDATA[struts2]]></category>
		<category><![CDATA[struts2标签]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=501</guid>
		<description><![CDATA[Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文... ]]></description>
			<content:encoded><![CDATA[<p>Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文中将介绍Action标签、Bean标签、Data标签、 Include标签、Param标签、Set标签、Text标签、Property标签等标签。</p>
<p>代码下载:<br />
<script type="text/javascript">// <![CDATA[
  google_ad_client = "pub-9439928162046667"; /* 468x15, 创建于 09-11-1 */ google_ad_slot = "8400307026"; google_ad_width = 468; google_ad_height = 15;
// ]]&gt;
// ]]&gt;</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script type="text/javascript">// <![CDATA[
google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);
// ]]&gt;</script><ins><ins></ins></ins><br />
<a href="http://60.12.73.46/upload/Struts2DataTags.rar">Struts2DataTags</a></p>
<p>六、&lt;s:set&gt;标签</p>
<p>Set标签比较简单。Set标签用户将某一值赋给某一变量，因此，任何对该项值的引用都可以通过该变量来得到该值。该变量的活动范围可自定义。如下例中，定义一健/值对，对值的引用，直接引用值就可以。。请看示例<br />
1．WebRoot\pages\dataTags\ setTag.jsp</p>
<p>&lt;%@ page contentType=&#8221;text/html; charset=GBK&#8221; %&gt;<br />
&lt;%@ taglib prefix=&#8221;s&#8221; uri=&#8221;/struts-tags&#8221; %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Set Tag 示例&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h2&gt;Set Tag 示例&lt;/h2&gt;<br />
&lt;s:set name=&#8221;technologyName&#8221; value=&#8221;%{&#8216;Java&#8217;}&#8221;/&gt;<br />
Technology Name: &lt;s:property value=&#8221;#technologyName&#8221;/&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
2．Struts.xml配置<br />
&lt;action name=&#8221;setTag&#8221;&gt;<br />
&lt;result&gt;/pages/dataTags/setTag.jsp&lt;/result&gt;<br />
&lt;/action&gt;</p>
<p>3．运行效果</p>
<p><img src="http://www.blogjava.net/images/blogjava_net/sterning/Struts2DataTags-6-set.gif" border="0" alt="" width="456" height="180" /><br />
图6.&lt;s:set&gt;标签</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-tag-set-501/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2标签系列教程之s:param标签</title>
		<link>http://javadou.com/struts2-tag-s-param-500/</link>
		<comments>http://javadou.com/struts2-tag-s-param-500/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 05:49:05 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[struts2]]></category>
		<category><![CDATA[struts2标签]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=500</guid>
		<description><![CDATA[Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文... ]]></description>
			<content:encoded><![CDATA[<p>Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文中将介绍Action标签、Bean标签、Data标签、 Include标签、Param标签、Set标签、Text标签、Property标签等标签。</p>
<p>代码下载:<br />
<script type="text/javascript">// <![CDATA[
  google_ad_client = "pub-9439928162046667"; /* 468x15, 创建于 09-11-1 */ google_ad_slot = "8400307026"; google_ad_width = 468; google_ad_height = 15;
// ]]&gt;
// ]]&gt;</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script type="text/javascript">// <![CDATA[
google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);
// ]]&gt;</script><ins><ins></ins></ins><br />
<a href="http://60.12.73.46/upload/Struts2DataTags.rar">Struts2DataTags</a></p>
<p>五、&lt;s:param&gt;标签</p>
<p>Param标签用于传递参数，如给&lt;s:bean&gt;标签传递参数。它有如下两个属性：<br />
Name(String)：参数名；<br />
Value(Object)：参数值。<br />
1．WebRoot\pages\dataTags\paramTag.jsp</p>
<p>&lt;%@ page contentType=&#8221;text/html; charset=GBK&#8221; %&gt;<br />
&lt;%@ taglib prefix=&#8221;s&#8221; uri=&#8221;/struts-tags&#8221; %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Param Tag 示例&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h2&gt;Param Tag 示例&lt;/h2&gt;<br />
&lt;ui:component&gt;<br />
&lt;ui:param name=&#8221;empname&#8221;&gt;Emp1&lt;/ui:param&gt;&lt;br&gt;<br />
&lt;ui:param name=&#8221;empname&#8221;&gt;Emp2&lt;/ui:param&gt;&lt;br&gt;<br />
&lt;ui:param name=&#8221;empname&#8221;&gt;Emp3&lt;/ui:param&gt;<br />
&lt;/ui:component&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>2．Struts.xml配置<br />
&lt;action name=&#8221;paramTag&#8221;&gt;<br />
&lt;result&gt;/pages/dataTags/paramTag.jsp&lt;/result&gt;<br />
&lt;/action&gt;</p>
<p>3．运行效果</p>
<p><img src="http://www.blogjava.net/images/blogjava_net/sterning/Struts2DataTags-5-param.gif" border="0" alt="" width="468" height="230" /><br />
图5.&lt;s:param&gt;标签</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-tag-s-param-500/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2标签系列教程之s:include标签</title>
		<link>http://javadou.com/struts2-tag-s-include-499/</link>
		<comments>http://javadou.com/struts2-tag-s-include-499/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 05:45:10 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[struts2]]></category>
		<category><![CDATA[struts2标签]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=499</guid>
		<description><![CDATA[Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文... ]]></description>
			<content:encoded><![CDATA[<p>Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文中将介绍Action标签、Bean标签、Data标签、 Include标签、Param标签、Set标签、Text标签、Property标签等标签。</p>
<p>代码下载:<br />
<script type="text/javascript">// <![CDATA[
  google_ad_client = "pub-9439928162046667"; /* 468x15, 创建于 09-11-1 */ google_ad_slot = "8400307026"; google_ad_width = 468; google_ad_height = 15;
// ]]&gt;
// ]]&gt;</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script type="text/javascript">// <![CDATA[
google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);
// ]]&gt;</script><ins><ins></ins></ins><br />
<a href="http://60.12.73.46/upload/Struts2DataTags.rar">Struts2DataTags<br />
</a></p>
<p>四、&lt;s:include&gt;标签</p>
<p>&lt;s:include&gt;标签用于在当前页面中包含来自其它servlet或JSP页面的处理结果。由于是页面与页面（或servlet）之间的页面包含，因此不需要action来进行页面的跳转。<br />
1．WebRoot\pages\dataTags\includeTag.jsp</p>
<p>&lt;%@ page contentType=&#8221;text/html; charset=GBK&#8221; %&gt;<br />
&lt;%@ taglib prefix=&#8221;s&#8221; uri=&#8221;/struts-tags&#8221; %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Include Tag 示例&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h2&gt;Include Tag 示例&lt;/h2&gt;<br />
&lt;s:include value=&#8221;myBirthday.jsp&#8221; /&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>这里包含了另外一个页面myBirthday.jsp，其实相当于在JSP页面里包含其它的页面。原理一样的。</p>
<p>2．WebRoot\pages\dataTags\myBirthday.jsp</p>
<p>这个页面利用了上面所讲的&lt;s:date&gt;标签进行日期的格式化输出</p>
<p>&lt;%@ page contentType=&#8221;text/html; charset=GBK&#8221; %&gt;<br />
&lt;%@ taglib prefix=&#8221;s&#8221; uri=&#8221;/struts-tags&#8221; %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Include Tag 示例&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table border=&#8221;1&#8243; width=&#8221;35%&#8221;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;b&gt;Date Format&lt;/b&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Day/Month/Year&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;myBirthday&#8221; format=&#8221;dd/MM/yyyy&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Month/Day/Year&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;myBirthday&#8221; format=&#8221;MM/dd/yyyy&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Month/Day/Year&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;myBirthday&#8221; format=&#8221;MM/dd/yy&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Month/Day/Year Hour&lt;B&gt;:&lt;/B&gt;Minute&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;myBirthday&#8221; format=&#8221;MM/dd/yy hh:mm&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Month/Day/Year Hour&lt;B&gt;:&lt;/B&gt;Minute&lt;B&gt;:&lt;/B&gt;Second&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;myBirthday&#8221; format=&#8221;MM/dd/yy hh:mm:ss&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Nice Date (Current Date &amp; Time)&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;myBirthday&#8221; nice=&#8221;false&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>3．Struts.xml配置</p>
<p>&lt;action name=&#8221;includeTag&#8221;&gt;<br />
&lt;result&gt;/pages/dataTags/includeTag.jsp&lt;/result&gt;<br />
&lt;/action&gt;<br />
4．运行效果</p>
<p><img src="http://www.blogjava.net/images/blogjava_net/sterning/Struts2DataTags-4-include.gif" border="0" alt="" width="494" height="404" /><br />
图4.&lt;s:include&gt;标签</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-tag-s-include-499/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2标签系列教程之 s:date标签</title>
		<link>http://javadou.com/struts2-tags-s-date-498/</link>
		<comments>http://javadou.com/struts2-tags-s-date-498/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 05:40:20 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[struts2]]></category>
		<category><![CDATA[struts2标签]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=498</guid>
		<description><![CDATA[Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文... ]]></description>
			<content:encoded><![CDATA[<p>Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文中将介绍Action标签、Bean标签、Data标签、 Include标签、Param标签、Set标签、Text标签、Property标签等标签。</p>
<p>代码下载:<br />
<script type="text/javascript">// <![CDATA[
  google_ad_client = "pub-9439928162046667"; /* 468x15, 创建于 09-11-1 */ google_ad_slot = "8400307026"; google_ad_width = 468; google_ad_height = 15;
// ]]&gt;
// ]]&gt;</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script type="text/javascript">// <![CDATA[
google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);
// ]]&gt;</script><ins><ins></ins></ins><br />
<a href="http://60.12.73.46/upload/Struts2DataTags.rar">Struts2DataTags</a></p>
<p>三、&lt;s:date&gt;标签</p>
<p>Data标签方便在页面进行格式化的日期输出。格式有多种可供选择。同时，还可以通过在properties属性文件中定义好”struts.date.format”参数的值，从而自定义格式输出。</p>
<p>Date标签包含三个属性，可以从下面的代码中感受一下，分别是：</p>
<p>Name:<br />
Nice<br />
Format</p>
<p>WebRoot\pages\dataTags\dateTag.jsp</p>
<p>&lt;%@ page contentType=&#8221;text/html; charset=GBK&#8221; %&gt;<br />
&lt;%@ taglib prefix=&#8221;s&#8221; uri=&#8221;/struts-tags&#8221; %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Date Tag 示例&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h2&gt;显示当前的时间&lt;/h2&gt;<br />
&lt;table border=&#8221;1&#8243; width=&#8221;35%&#8221;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;b&gt;日期格式&lt;/b&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;b&gt;日期&lt;/b&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Day/Month/Year&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;currentDate&#8221; format=&#8221;dd/MM/yyyy&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Month/Day/Year&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;currentDate&#8221; format=&#8221;MM/dd/yyyy&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Month/Day/Year&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;currentDate&#8221; format=&#8221;MM/dd/yy&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Month/Day/Year Hour&lt;B&gt;:&lt;/B&gt;Minute&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;currentDate&#8221; format=&#8221;MM/dd/yy hh:mm&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Month/Day/Year Hour&lt;B&gt;:&lt;/B&gt;Minute&lt;B&gt;:&lt;/B&gt;Second&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;currentDate&#8221; format=&#8221;MM/dd/yy hh:mm:ss&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Nice Date (Current Date &amp; Time)&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;currentDate&#8221; nice=&#8221;false&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Nice Date&lt;/td&gt;<br />
&lt;td&gt;&lt;s:date name=&#8221;currentDate&#8221; nice=&#8221;true&#8221; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>2．src\com\sterning\beanTag.java<br />
该项类更加简单，页面跳转</p>
<p>package com.sterning;<br />
import com.opensymphony.xwork2.ActionSupport;<br />
public class beanTag extends ActionSupport {<br />
public String execute() throws Exception{<br />
return SUCCESS;<br />
}<br />
}</p>
<p>3．Struts.xml配置<br />
&lt;action name=&#8221;dateTag&#8221;&gt;<br />
&lt;result&gt;/pages/dataTags/dateTag.jsp&lt;/result&gt;<br />
&lt;/action&gt;<br />
4．运行效果</p>
<p><img src="http://www.blogjava.net/images/blogjava_net/sterning/Struts2DataTags-3-date.gif" border="0" alt="" width="612" height="426" /><br />
图3.&lt;s:date&gt;标签</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-tags-s-date-498/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2标签 s:bean标签使用</title>
		<link>http://javadou.com/struts2-tag-s-bean-497/</link>
		<comments>http://javadou.com/struts2-tag-s-bean-497/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 05:34:55 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[struts2]]></category>
		<category><![CDATA[struts2标签]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=497</guid>
		<description><![CDATA[Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文... ]]></description>
			<content:encoded><![CDATA[<p>Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对 Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文中将介绍Action标签、Bean标签、Data标签、 Include标签、Param标签、Set标签、Text标签、Property标签等标签。</p>
<p>代码下载:<br />
<script type="text/javascript">// <![CDATA[
  google_ad_client = "pub-9439928162046667"; /* 468x15, 创建于 09-11-1 */ google_ad_slot = "8400307026"; google_ad_width = 468; google_ad_height = 15;
// ]]&gt;
// ]]&gt;</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script type="text/javascript">// <![CDATA[
google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);
// ]]&gt;</script><ins><ins></ins></ins><br />
<a href="http://60.12.73.46/upload/Struts2DataTags.rar">Struts2DataTags</a></p>
<p><strong>二、</strong><strong>&lt;s:bean&gt;</strong><strong>标签</strong></p>
<p>Bean标签，当然需要一个JavaBean。其的属性值的操作是经由Bean标签中的参数属性来进行赋值。当然，它还有一个id属性可以进行赋值，由于就可以在上下文中使用这个Bean。请看如下的页面：</p>
<p>1．WebRoot\pages\dataTags\beanTag.jsp，代码如下：<br />
&lt;%@ page contentType=&#8221;text/html; charset=GBK&#8221; %&gt;<br />
&lt;%@ taglib prefix=&#8221;s&#8221; uri=&#8221;/struts-tags&#8221; %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Bean Tag 示例&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h2&gt;Bean Tag 示例&lt;/h2&gt;<br />
&lt;s:bean name=&#8221;com.sterning.companyName&#8221; id=&#8221;uid&#8221;&gt;<br />
&lt;s:param name=&#8221;name&#8221;&gt;sterning&lt;/s:param&gt;<br />
&lt;s:property value=&#8221;%{name}&#8221; /&gt;&lt;br&gt;<br />
&lt;/s:bean&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>可参其关联的JavaBean是com.sterning.companyName，同时参数name赋值为sterning。<br />
2．首先创建Action进行跳转， src\com\sterning\beanTag.java，代码如下：</p>
<p>package com.sterning;<br />
import com.opensymphony.xwork2.ActionSupport;<br />
public class beanTag extends ActionSupport {<br />
public String execute() throws Exception{<br />
return SUCCESS;<br />
}<br />
}</p>
<p>然后创建JavaBean，src\com\sterning\companyName.java，代码如下：</p>
<p>package com.sterning;<br />
public class companyName {<br />
private String name;<br />
public void setName(String name){<br />
this.name =name ;<br />
}<br />
public String getName(){<br />
return name;<br />
}<br />
}</p>
<p>3．Struts.xml的配置</p>
<p>这里配置很简单，与前面的例子差不多。<br />
&lt;action name=&#8221;beanTag&#8221;&gt;<br />
&lt;result name=&#8221;success&#8221;&gt;/pages/dataTags/beanTag.jsp&lt;/result&gt;<br />
&lt;/action&gt;</p>
<p>4．运行效果</p>
<p><img src="http://www.blogjava.net/images/blogjava_net/sterning/Struts2DataTags-2-bean.gif" border="0" alt="" width="494" height="164" /><br />
图2.&lt;s:bean&gt;标签</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-tag-s-bean-497/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2标签系列教程 struts2标签介绍、标签使用</title>
		<link>http://javadou.com/struts2-tag-struts2-s-action-tag-496/</link>
		<comments>http://javadou.com/struts2-tag-struts2-s-action-tag-496/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 05:31:37 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[struts2]]></category>
		<category><![CDATA[struts2标签]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=496</guid>
		<description><![CDATA[Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文... ]]></description>
			<content:encoded><![CDATA[<p>Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文中将介绍Action标签、Bean标签、Data标签、Include标签、Param标签、Set标签、Text标签、Property标签等标签。</p>
<p>代码下载:<br />
<script type="text/javascript">// <![CDATA[
  google_ad_client = "pub-9439928162046667"; /* 468x15, 创建于 09-11-1 */ google_ad_slot = "8400307026"; google_ad_width = 468; google_ad_height = 15;
// ]]&gt;</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><br />
<a href="http://60.12.73.46/upload/Struts2DataTags.rar">Struts2DataTags</a></p>
<p><strong>一、&lt;s:action&gt;</strong><strong>标签</strong></p>
<p>Action标签，顾名思义，是用来调用Action的标签，在JSP中页面中，可以指向具体指定某一命名空间中的某一Action。而标签的主体用于显示及渲染Actionr的处理结果。</p>
<p>1．WebRoot\pages\dataTagssuccess.jsp处理页面<br />
&lt;%<img src="http://www.blogjava.net/Images/dot.gif" alt="" />@ page contentType=&#8221;text/html; charset=GBK&#8221; %&gt;<br />
&lt;%<img src="http://www.blogjava.net/Images/dot.gif" alt="" />@ taglib prefix=&#8221;s&#8221; uri=&#8221;/struts-tags&#8221; %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top" />&lt;title&gt;Action Tag 示例&lt;/title&gt;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top" />&lt;/head&gt;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top" />&lt;body&gt;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top" />&lt;h2&gt;Action Tag 示例&lt;/h2&gt;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top" />&lt;s:action name=&#8221;success&#8221;&gt;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top" />&lt;b&gt;&lt;i&gt;s:action标签用于在页面显示结果.&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top" />&lt;/s:action&gt;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top" />&lt;/body&gt;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top" />&lt;/html&gt;</p>
<p>这里使用&lt;s:action&gt;标签进行页面跳转，并用于显示处理的结果。</p>
<p>2．先来看struts.xml中的配置：<br />
&lt;action name=&#8221;actionTag&#8221; class=&#8221;com.sterning.actionTag&#8221;&gt;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top" />&lt;result name=&#8221;success&#8221;&gt;/pages/dataTags/success.jsp&lt;/result&gt;<br />
&lt;/action&gt;<br />
3．接着创建actionTag类：代码如下：<br />
package com.sterning;<br />
import com.opensymphony.xwork2.ActionSupport;<br />
publicclass actionTag extends ActionSupport {<br />
public String execute() throws Exception{<br />
returnSUCCESS;<br />
}<br />
}</p>
<p>其实该类中没有做任何处理，只是进行页面跳转而已。</p>
<p>4．运行效果。</p>
<p><img src="http://www.blogjava.net/images/blogjava_net/sterning/Struts2DataTags-1-action.gif" border="0" alt="" width="520" height="197" /><br />
图1.&lt;s:action&gt;标签</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-tag-struts2-s-action-tag-496/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>struts2 标签 OGNL取值</title>
		<link>http://javadou.com/struts2-tag-ognl-val-495/</link>
		<comments>http://javadou.com/struts2-tag-ognl-val-495/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 05:54:29 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[ognl]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=495</guid>
		<description><![CDATA[1. OGNL 中有生成 List 和 Map 的表达式，分别是：{e1,e2,e3,&8230;} 和 {key1:val1,key2:val2,&8230;}。对集合 OGNL 提供了两个操作符 in 和 not in，如： &60;s:if test=&8221;&8216;foo&8217; in {&8216;foo&8217;,'bar&8217;}&8221; &8230; &60;/s:if&62... ]]></description>
			<content:encoded><![CDATA[<div id="articleBody"><span style="font-family: Arial;">1. OGNL 中有生成 List 和 Map 的表达式，分别是：{e1,e2,e3,&#8230;} 和 #{key1:val1,key2:val2,&#8230;}。对集合 OGNL 提供了两个操作符 in 和 not in，如：<br />
&lt;s:if test=&#8221;&#8216;foo&#8217; in {&#8216;foo&#8217;,'bar&#8217;}&#8221; &#8230; &lt;/s:if&gt;            &#8212;- not in 的用法当然是一样的了。<br />
之外，OGNL 还允许通过某个规则取集合的子集<br />
·? ：取出所有符合条件逻辑的元素<br />
·^：取出符合条件的第一个元素<br />
·$：取出符合条件的最后一个元素<br />
请将上面这三个符号与正则表达式的表示法联系起来<br />
例了：persons.relatives.{? #this.gender == &#8216;male&#8217;}        //取出集合 persons 中所有 gender 属性为 &#8216;male&#8217; 的子集。<br />
理解 ValueStack 和 Stack Context：<br />
1) ValueStack 可以用 request.getAttribute(&#8220;struts.valueStack&#8221;) 取得的一个 com.opensymphony.xwork2.util.OgnlValueStack 实例，它实现为一个栈，有 peek()、pop()、push(obj) 方法。<br />
2) Stack Context 是在前面的 ValueStack 的上下中的一个 java.util.Stack 实例：<br />
//stack 为 ValueStack 实例，COMPONENT_STACK=&#8221;__component_stack&#8221;<br />
// org.apache.struts2.components.Component.getComponentStack() 中的代码<br />
Stack componentStack = (Stack) stack.getContext().get(COMPONENT_STACK);<br />
取值要通过&lt;s:property value=&#8221;" /&gt;或在任意的&lt;s:/&gt;标签内使用%{}；<br />
当Action的valueStack中有该属性的值时，只需直接使用该属性的名字即可；<br />
当Action的valueStack中没有该属性的值时，比如在session,application范围中的属性值时，需要加#或者#attr.；<br />
</span></p>
<div>
<ol>
<li><span style="font-family: Arial;">假设某Action中有person成员变量，在application中存在company属性</span></li>
<li><span style="font-family: Arial;">那么我们可以通过以下方法取值：</span></li>
<li><span style="font-family: Arial;">&lt;s:property value=&#8221;person.name&#8221; /&gt;</span></li>
<li><span style="font-family: Arial;">&lt;s:property value=&#8221;#person.name&#8221; /&gt;</span></li>
<li><span style="font-family: Arial;">&lt;s:property value=&#8221;company.name&#8221; /&gt; //无法取到，因为company不在action的valueStack中</span></li>
<li><span style="font-family: Arial;">&lt;s:property value=&#8221;#company.name&#8221; /&gt;</span></li>
<li><span style="font-family: Arial;">&lt;s:textfield name=&#8221;person.name&#8221; value=&#8221;person.name&#8221; /&gt; //错误，value会直接显示person.name字样</span></li>
<li><span style="font-family: Arial;">&lt;s:textfield name=&#8221;person.name&#8221; value=&#8221;%{person.name}&#8221; /&gt;</span></li>
<li><span style="font-family: Arial;">&lt;s:textfield name=&#8221;person.company.name&#8221; value=&#8221;%{#company.name}&#8221; /&gt;</span></li>
<li><span style="font-family: Arial;">&lt;s:textfield name=&#8221;person.company.name&#8221; value=&#8221;%{#attr.company.name}&#8221; /&gt;</span></li>
<li>
<div><span style="font-family: Arial;"><br />
</span></div>
</li>
</ol>
</div>
<p><span style="font-family: Arial;">2. Struts2 的各路标签<br />
&lt;s:if test=&#8221;exp&#8221;&gt;&#8230;&lt;/s:if&gt;&lt;s:elseif test=&#8221;exp&#8221;&gt;&#8230;&lt;/s:elseif&gt;&lt;s:else&gt;&#8230;&lt;/s:else&gt; 对应了 java 的 if/else if/else<br />
&lt;s:iterator&#8230;/&gt; value 未指定是默认为 ValueStack 栈顶集合。id 为当前元素变量名。status 为 IteratorStatus 实例，包含奇还是偶行，当前索引，是否第一或最后一条记录。</span></p>
<p>3. iterator 可以迭代 List、Set 和数组，也可以迭代 Map，用法如下：</p>
<div>
<ol>
<li><span style="font-family: Arial;">&lt;s:iterator value=&#8221;{&#8216;e1&#8242;,&#8217;e2&#8242;,&#8217;e3&#8242;}&#8221; id=&#8221;name&#8221; status=&#8221;st&#8221;&gt;   //这是用 OGNL 生成的 List</span></li>
<li><span style="font-family: Arial;"> &lt;s:property value=&#8221;name&#8221;/&gt; //也可以写成 &lt;s:property value=&#8221;#name&#8221;/&gt;</span></li>
<li><span style="font-family: Arial;"> &lt;s:if test=&#8221;#st.odd&#8221;&gt;偶数位&lt;/s:if&gt;</span></li>
<li><span style="font-family: Arial;"> // st 其他属必如：#st.count、#st.index、#st.even、#st.first、#st.last，前面的 # 号不能少</span></li>
<li><span style="font-family: Arial;"> &lt;/s:iterator&gt;</span></li>
<li><span style="font-family: Arial;"> 迭代 Map，用 key 和 map 对应</span></li>
<li><span style="font-family: Arial;"> &lt;s:iterator value=&#8221;#{&#8216;key1&#8242;:&#8217;val1&#8242;,&#8217;key2&#8242;:&#8217;val2&#8242;,&#8217;key3&#8242;:&#8217;val3&#8242;}&#8221;&gt;</span></li>
<li><span style="font-family: Arial;"> &lt;s:property value=&#8221;key&#8221;/&gt; | &lt;s:property value=&#8221;value&#8221;/&gt; //不能写成 #key 和 #value</span></li>
<li><span style="font-family: Arial;"> &lt;/s:iterator&gt;</span></li>
</ol>
</div>
<p><span style="font-family: Arial;">4. &lt;s:append&#8230;/&gt; 用于将多个集合拼成一个新集合，从而能用一个&lt;s:iterator &#8230;/&gt; 对多个集合迭代，也能拼 Map 的。&lt;s:merge &#8230;/&gt; 也是用来拼接集合，只是不像 &lt;s:append &#8230;/&gt; 那样依次保持着顺序，&lt;s:merge &#8230;/&gt; 是交错的。可以理解为前一个是深度拼接，后一个是广度拼接。</span></p>
<p>5. 在学习 &lt;s:generator &#8230;/&gt; 时我们能同时体验一下 Struts2 标签是如何操作栈的，当然这里指的是 ValueStack，而非 Java 的方法栈。<br />
&lt;s:generator val=&#8221;&#8217;1,2,3&#8242;&#8221; separator=&#8221;,&#8221;&gt; &lt;!&#8211;字符串&#8217;123&#8242;以&#8221;,&#8221;分隔生成一个集合，并压栈&#8211;&gt;<br />
&lt;s:iterator&gt;      &lt;!&#8211; 这里没有指定 value 属性，默认弹栈，并取一个元素压栈 &#8211;&gt;<br />
&lt;s:property/&gt; &lt;!&#8211; 也没有指定 value 属性，默认也是取栈顶元素 &#8211;&gt;<br />
&lt;/s:iterator&gt;     &lt;!&#8211; 迭代完成则从集合遍历的最后一个元素出栈 &#8211;&gt;<br />
&lt;/s:generator&gt;      &lt;!&#8211; 最后，自动出栈，generator 生成的集合出栈 &#8211;&gt;<br />
汇编是基于寄存器操作的，而 Java 是基于栈的操作，Struts2 引入了存放在 request 中的 ValueStack 正好完美再现了 Java 的这一原始本性，并可使标签使用更简洁，灵活。Struts2 还有很多标签也有这个特性：<br />
1) 生成的新实例，压栈，标签结束后自动出栈<br />
2) 在未指定数据来源时，默认从栈顶取数据。<br />
不禁回想起 Struts1 的 &lt;nested:root&gt; 等 nested 标签要显示的声明操作的根元素，是多么麻烦的一件事。<br />
补充：如果指定了 &lt;s:generator &#8230;/&gt; 的 id 属性的话，同时还会把生成的集合放到 pageContext 中，key 就是 id 指定的值。</p>
<p>6. &lt;s:subset &#8230;/&gt; 是用来取集合子集的，可从 source (未指定则为栈顶集合) 集合的 start 位置起取 count 个元素。或者按自定义的 decider 条件，取符合条件的子集。你的 decider 要实现 SubsetIteratorFilter.Decider 接口的 decide(object element) 方法，符合条件的返回 true。此处不列出具体用法的实例。</p>
<p>7. &lt;s:sort &#8230;/&gt; 依据 comparator 指定的比较器，对 source (未指定则为栈顶集合) 集合排序。排序头的集合当然也是压入栈中，标签结束自动出栈。</p>
<p>8. &lt;s:debug/&gt; 会在页面生成一个 debug 链接，展开能看到 ValueStack 和 Stack Context 中的内容，该页面有显示用 #key 能获取到 Stack Context 中的值。&lt;s:property &#8230;/&gt; 在前面用很多次了，就相当于 Struts1 的 &lt;bean:write &#8230;/&gt;，value 未指定，输出栈顶值；若要输出的值为 null 时，指定了 default 属性则输出它；escape 指定是否忽略 HTML 代码，同 &lt;bean:write &#8230;/&gt; 的 ignore 属性。</p>
<p>9. &lt;s:push &#8230;/&gt; 用于将某个值压栈，标签结束后自动出栈，可方便某些操作，Struts1 的 &lt;nested:root&gt; 有类似功能。&lt;s:set &#8230;/&gt; 标签用于把某个值放入指定范围内，用 scope 指定，如 application、session、request、page、action。若未指定 scope 则放到 Stack Context 中；name 为新变量名；value 为欲处理的变量，未指定则取栈顶值。</p>
<p>10. 从前面的标签，你也许已经注意到，Struts2 常操作的几个数据结构有 ValueStack、pageContext 和 StackContext。例如：generator、sort、subset 等生成的新实例会压到栈顶，并在标签结束自动出栈；如果 sort、subset 未指定 source 源集合，则从栈顶取，iterator、property 也是一样的；若为 generator 指定了 id 属性，则生的集合会存到 pageContext 中，key 就是 id 对应值；如果为 bean 指定了 id 属性，则会把 bean 实例存入到 Stack Context 中，key 就是 id 对应值，Stack Conext 中的值可以用 #key 取得。其他标签类似的地方应该要注意到。</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-tag-ognl-val-495/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>struts2 (#  % $)井号，百分号,美圆号的含义和使用举例</title>
		<link>http://javadou.com/struts2-fuhao-shiyong-494/</link>
		<comments>http://javadou.com/struts2-fuhao-shiyong-494/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 05:06:22 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[recommend]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=494</guid>
		<description><![CDATA[struts2 OGNL，struts2 表达式语言，Struts2 中OGNL表达式的用法，Struts2 ，表达式语言的好处，Struts2 $，struts2 井号，struts2 ( % $)井号，百分号,美圆号 表达式语言主要有以下几大好处： 1. 避免(MyType) request.getAttribute()和myBean... ]]></description>
			<content:encoded><![CDATA[<p>struts2 OGNL，struts2 表达式语言，Struts2 中OGNL表达式的用法，Struts2 #，表达式语言的好处，Struts2 $，struts2 井号，struts2 (#  % $)井号，百分号,美圆号<br />
表达式语言主要有以下几大好处：</p>
<p>1. 避免(MyType) request.getAttribute()和myBean.getMyProperty()之类的语句，使页面更简洁；<br />
2. 支持运算符（如+-*/），比普通的标志具有更高的自由度和更强的功能；<br />
3. 简单明了地表达代码逻辑，使用代码更可读与便于维护。</p>
<p>Struts2 中OGNL表达式的用法：</p>
<p>OGNL（Object-Graph Navigation Language），可以方便地操作对象属性的开源表达式语言；</p>
<p>“#”主要有三种用途：</p>
<p>1. 访问OGNL上下文和Action上下文，#相当于ActionContext.getContext()；下表有几个ActionContext中有用的属性：<br />
名称   作用 例子<br />
parameters    包含当前HTTP请求参数的Map    #parameters.id[0]作用相当于request.getParameter(&#8220;id&#8221;)<br />
request   包含当前HttpServletRequest的属性（attribute)的Map    #request.userName相当于request.getAttribute(&#8220;userName&#8221;)<br />
session   包含当前HttpSession的属性（attribute）的Map   #session.userName相当于session.getAttribute(&#8220;userName&#8221;)<br />
application   包含当前应用的ServletContext的属性（attribute）的Map     #application.userName相当于application.getAttribute(&#8220;userName&#8221;)<br />
attr 用于按request &gt; session &gt; application顺序访问其属性（attribute）    #attr.userName相当于按顺序在以上三个范围（scope）内读取userName属性，直到找到为止<br />
2. 用于过滤和投影（projecting)集合，如books.{?#this.price&lt;100}；<br />
3. 构造Map，如#{&#8216;foo1&#8242;:&#8217;bar1&#8242;, &#8216;foo2&#8242;:&#8217;bar2&#8242;}。<br />
“%”的用途是在标志的属性为字符串类型时，计算OGNL表达式的值。例如在Ognl.jsp中加入以下代码：<br />
&lt;hr /&gt;<br />
&lt;h3&gt;%的用途&lt;/h3&gt;<br />
&lt;p&gt;&lt;s:url value=&#8221;#foobar['foo1']&#8221; /&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;s:url value=&#8221;%{#foobar['foo1']}&#8221; /&gt;&lt;/p&gt;</p>
<p>“$”有两个主要的用途 ：<br />
1. 用于在国际化资源文件中，引用OGNL表达式，例子请参考《在Struts 2.0中国际化(i18n)您的应用程序》<br />
2. 在Struts 2配置文件中，引用OGNL表达式，如<br />
&lt;action name=&#8221;AddPhoto&#8221;&gt;<br />
&lt;interceptor-ref name=&#8221;fileUploadStack&#8221; /&gt;<br />
&lt;result type=&#8221;redirect&#8221;&gt;ListPhotos.action?albumId=${albumId}&lt;/result&gt;<br />
&lt;/action&gt;</p>
<p>###############2010-01-14日更新################</p>
<p>struts2中的OGNL上下文<br />
struts2对OGNL上下文的概念又做了进一步扩充，在struts2中，OGNL上下文通常如下所示：</p>
<p>|&#8211;request<br />
|<br />
|&#8211;application<br />
|<br />
context map&#8212;|&#8211;OgnlValueStack(root) [ user, action, OgnlUtil, ... ]<br />
|<br />
|&#8211;session<br />
|<br />
|&#8211;attr<br />
|<br />
|&#8211;parameters</p>
<p>我们可以使用&#8221;#requet&#8221;访问HttpServletRequest对象, &#8220;#session&#8221;访问HttpSession对象，但请注意&#8221;根对象&#8221;是什么？是ValueStack!<br />
那么ValueStack是什么？值栈。也就是一组对象的堆栈。也就是说，在struts2中，根对象不是我们通常的一个对象，而是一组对象。我们可以push新的对象到值栈中，也可以弹出值栈的栈顶对象。如上图所示，假设我们将user对象push到值栈中，那么如下的表达式将与之前我们见过的表达式一样，具有相同的结果：<br />
Java代码</p>
<p>name // 取用户的姓名<br />
age // 取用户年龄<br />
birthday // 取用户生日<br />
customer.name // 取用户所属客户的名称<br />
#request.parameters // 取请求参数</p>
<p>也就是说，我们使用name这个表达式的时候，ONGL会取&#8221;根对象&#8221;的name属性，但现在根对象是ValueStack！那么访问 ValueStack的name属性意味着什么呢？这意味着: ValueStack会先查看栈顶元素是否有name属性，如果有就返回该属性值，否则取出栈顶下的元素，继续查看，直到栈底为止。</p>
<p>以上就是OGNL表达式的核心概念，你理解了吗？下一步，你需要了进一步了解OGNL的语法，以发掘其更强大的功能！</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-fuhao-shiyong-494/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2 json session close no session 异常解决</title>
		<link>http://javadou.com/struts2-json-session-close-no-session-exception-489/</link>
		<comments>http://javadou.com/struts2-json-session-close-no-session-exception-489/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 06:16:56 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Struts2]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[OpenSessionInViewFilter]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=489</guid>
		<description><![CDATA[异常信息： ERROR – failed to lazily initialize a collection of role: com.dudu.pojo.User.roles, no session or session was closed org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.dudu.pojo.User.roles, no session or session was clos... ]]></description>
			<content:encoded><![CDATA[<p>异常信息：</p>
<p>ERROR – failed to lazily initialize a collection of role: com.dudu.pojo.User.roles, no session or session was closed</p>
<p>org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.dudu.pojo.User.roles, no session or session was closed</p>
<p>异常说明：session已关闭，无法初始化懒加载数据集role</p>
<p>异常原因：Hibernate映射文件中配置了lazy=&#8221;true&#8221;，同时也启用了OpenSessionInViewFilter。当实现ajax检测role名称是否可用时报以上异常，我这里检测role名称是利用json格式返回数据的。json返回数据的特点是：如果action中的属性有get()方法并且该属性没有transient修饰，那么json就会将其返回。在我的TrackSmsExpertAction中有private User  role;并且role有get()方法，所以在检测名称是否可用后返回的json数据中会将这一属性返回，但是检测名称的可用性根本不需要用到这个属性，异常就是由于启用懒加载机制下json中返回role这个属性需要查询数据库，而这时session已经关闭，因此报异常。</p>
<p>解决方法：用transient对role属性进行修饰，即：private transient User  role;这样json就不会将其返回，因为也不用再次查询关联数据不会出现session已关闭的异常。</p>
<p>如果还是不行的话 请检查你的Action中是否有多余的get set方法 把不用的全部去掉 就可以解决问题了 最后感谢下<a href="http://imleeo.com" target="_blank">IT北瓜</a>的提醒帮我解决问题</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-json-session-close-no-session-exception-489/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>struts1与struts2的各个的优点和缺点</title>
		<link>http://javadou.com/struts1-struts2-good-and-bad-464/</link>
		<comments>http://javadou.com/struts1-struts2-good-and-bad-464/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 03:01:04 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[struts1]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=464</guid>
		<description><![CDATA[类: • Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。 • Struts 2 Action类可以实现一个Action接口，也可实现其他接口，使可选和定制的服务成为可能。Struts2提供一个ActionSuppor... ]]></description>
			<content:encoded><![CDATA[<p>类:<br />
• Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。<br />
• Struts 2 Action类可以实现一个Action接口，也可实现其他接口，使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的，任何有execute标识的POJO对象都可以用作Struts2的Action对象。</p>
<p>线程模式:<br />
• Struts1 Action是单例模式并且必须是线程安全的，因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事，并且要在开发时特别小心。Action资源必须是线程安全的或同步的。<br />
• Struts2 Action对象为每一个请求产生一个实例，因此没有线程安全问题。（实际上，servlet容器给每个请求产生许多可丢弃的对象，并且不会导致性能和垃圾回收问题）</p>
<p>Servlet 依赖:<br />
• Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。<br />
• Struts 2 Action不依赖于容器，允许Action脱离容器单独被测试。如果需要，Struts2 Action仍然可以访问初始的request和response。但是，其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。</p>
<p>可测性:<br />
• 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API（这使得测试要依赖于容器）。一个第三方扩展－－Struts TestCase－－提供了一套Struts1的模拟对象（来进行测试）。<br />
• Struts 2 Action可以通过初始化、设置属性、调用方法来测试，“依赖注入”支持也使测试更容易。</p>
<p>捕获输入:<br />
• Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm，开发者经常创建多余的类捕获输入。动态Bean（DynaBeans）可以作为创建传统ActionForm的选择，但是，开发者可能是在重新描述(创建)已经存在的JavaBean（仍然会导致有冗余的javabean）。<br />
• Struts 2直接使用Action属性作为输入属性，消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型，包括业务对象，能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。</p>
<p>表达式语言：<br />
• Struts1 整合了JSTL，因此使用JSTL EL。这种EL有基本对象图遍历，但是对集合和索引属性的支持很弱。<br />
• Struts2可以使用JSTL，但是也支持一个更强大和灵活的表达式语言－－&#8221;Object Graph Notation Language&#8221; (OGNL).</p>
<p>绑定值到页面（view）:<br />
• Struts 1使用标准JSP机制把对象绑定到页面中来访问。<br />
• Struts 2 使用 &#8220;ValueStack&#8221;技术，使taglib能够访问值而不需要把你的页面（view）和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面（view）。</p>
<p>类型转换：<br />
• Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器，对每一个实例来说是不可配置的。<br />
• Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。</p>
<p>校验：<br />
• Struts 1支持在ActionForm的validate方法中手动校验，或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容，但不能校验子对象。<br />
• Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验，来支持chain校验子属性</p>
<p>Action执行的控制：<br />
• Struts1支持每一个模块有单独的Request Processors（生命周期），但是模块中的所有Action必须共享相同的生命周期。<br />
• Struts2支持通过拦截器堆栈（Interceptor Stacks）为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。<br />
——————————————————————————————————<br />
个人觉得Struts1是基于servlet开发，Struts2是基于Filter开发，相对于现在的企业来说Struts1的技术成熟，便于维护，而且现在的许多程序员使用SSH框架时，还是多选用struts1来开发~~<br />
当然Struts2安全性比Struts1要高~~</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts1-struts2-good-and-bad-464/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2 自定义拦截器</title>
		<link>http://javadou.com/struts2-invocation-459/</link>
		<comments>http://javadou.com/struts2-invocation-459/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:29:00 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/struts2-%e8%87%aa%e5%ae%9a%e4%b9%89%e6%8b%a6%e6%88%aa%e5%99%a8-459/</guid>
		<description><![CDATA[struts2/77_尚学堂马士兵_Struts2_自定义拦截器.wmv struts2/77_尚学堂马士兵_Struts2_自定义拦截器.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/77_尚学堂马士兵_Struts2_自定义拦截器.wmv@@@@@<br />
@@@@@struts2/77_尚学堂马士兵_Struts2_自定义拦截器.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-invocation-459/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2中的ognl表达式</title>
		<link>http://javadou.com/struts2-ognl-458/</link>
		<comments>http://javadou.com/struts2-ognl-458/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:27:34 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/struts2%e4%b8%ad%e7%9a%84ognl%e8%a1%a8%e8%be%be%e5%bc%8f-458/</guid>
		<description><![CDATA[struts2/36_尚学堂马士兵_Struts2_OGNL_1.wmv struts2/36_尚学堂马士兵_Struts2_OGNL_1.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/36_尚学堂马士兵_Struts2_OGNL_1.wmv@@@@@<br />
@@@@@struts2/36_尚学堂马士兵_Struts2_OGNL_1.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-ognl-458/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2 带参数的结果集</title>
		<link>http://javadou.com/struts2-result-for-par-457/</link>
		<comments>http://javadou.com/struts2-result-for-par-457/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:26:14 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/struts2-%e5%b8%a6%e5%8f%82%e6%95%b0%e7%9a%84%e7%bb%93%e6%9e%9c%e9%9b%86-457/</guid>
		<description><![CDATA[struts2/32_尚学堂马士兵_Struts2_带参数的结果集.wmv struts2/32_尚学堂马士兵_Struts2_带参数的结果集.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/32_尚学堂马士兵_Struts2_带参数的结果集.wmv@@@@@<br />
@@@@@struts2/32_尚学堂马士兵_Struts2_带参数的结果集.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-result-for-par-457/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2 动态结果集</title>
		<link>http://javadou.com/struts2-dynamic-result-456/</link>
		<comments>http://javadou.com/struts2-dynamic-result-456/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:23:56 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=456</guid>
		<description><![CDATA[struts2/31_尚学堂马士兵_Struts2_动态结果集_dynamic_result.wmv struts2/31_尚学堂马士兵_Struts2_动态结果集_dynamic_result.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/31_尚学堂马士兵_Struts2_动态结果集_dynamic_result.wmv@@@@@<br />
@@@@@struts2/31_尚学堂马士兵_Struts2_动态结果集_dynamic_result.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-dynamic-result-456/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2 全局结果集</title>
		<link>http://javadou.com/struts2-global-results-455/</link>
		<comments>http://javadou.com/struts2-global-results-455/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:23:05 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=455</guid>
		<description><![CDATA[struts2/30_尚学堂马士兵_Struts2_Global_Results_全局结果集.wmv struts2/30_尚学堂马士兵_Struts2_Global_Results_全局结果集.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/30_尚学堂马士兵_Struts2_Global_Results_全局结果集.wmv@@@@@<br />
@@@@@struts2/30_尚学堂马士兵_Struts2_Global_Results_全局结果集.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-global-results-455/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2_结果类型_result_type</title>
		<link>http://javadou.com/struts2-result-type-454/</link>
		<comments>http://javadou.com/struts2-result-type-454/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:21:42 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=454</guid>
		<description><![CDATA[struts2/27_尚学堂马士兵_Struts2_结果类型_result_type_.wmv struts2/27_尚学堂马士兵_Struts2_结果类型_result_type_.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/27_尚学堂马士兵_Struts2_结果类型_result_type_.wmv@@@@@<br />
@@@@@struts2/27_尚学堂马士兵_Struts2_结果类型_result_type_.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-result-type-454/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2 常见问题</title>
		<link>http://javadou.com/struts2-question-453/</link>
		<comments>http://javadou.com/struts2-question-453/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:20:37 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=453</guid>
		<description><![CDATA[struts2/26_尚学堂马士兵_Struts2_常见问题.wmv struts2/26_尚学堂马士兵_Struts2_常见问题.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/26_尚学堂马士兵_Struts2_常见问题.wmv@@@@@<br />
@@@@@struts2/26_尚学堂马士兵_Struts2_常见问题.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-question-453/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2 Action总结</title>
		<link>http://javadou.com/struts2-action-452/</link>
		<comments>http://javadou.com/struts2-action-452/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:19:44 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=452</guid>
		<description><![CDATA[struts2/25_尚学堂马士兵_Struts2_Action总结.wmv struts2/25_尚学堂马士兵_Struts2_Action总结.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/25_尚学堂马士兵_Struts2_Action总结.wmv@@@@@<br />
@@@@@struts2/25_尚学堂马士兵_Struts2_Action总结.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-action-452/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2默认Action</title>
		<link>http://javadou.com/struts2-default-action-451/</link>
		<comments>http://javadou.com/struts2-default-action-451/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:18:32 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=451</guid>
		<description><![CDATA[struts2/24_尚学堂马士兵_Struts2_默认Action.wmv struts2/24_尚学堂马士兵_Struts2_默认Action.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/24_尚学堂马士兵_Struts2_默认Action.wmv@@@@@<br />
@@@@@struts2/24_尚学堂马士兵_Struts2_默认Action.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-default-action-451/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2_模块包含</title>
		<link>http://javadou.com/struts2-model-include-450/</link>
		<comments>http://javadou.com/struts2-model-include-450/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 10:16:53 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/struts2_%e6%a8%a1%e5%9d%97%e5%8c%85%e5%90%ab-450/</guid>
		<description><![CDATA[struts2/23_尚学堂马士兵_Struts2_模块包含.wmv struts2/23_尚学堂马士兵_Struts2_模块包含.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/23_尚学堂马士兵_Struts2_模块包含.wmv@@@@@<br />
@@@@@struts2/23_尚学堂马士兵_Struts2_模块包含.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-model-include-450/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2_访问Web元素_2</title>
		<link>http://javadou.com/struts2-web-servlet-2-449/</link>
		<comments>http://javadou.com/struts2-web-servlet-2-449/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 10:16:35 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=449</guid>
		<description><![CDATA[struts2/22_尚学堂马士兵_Struts2_访问Web元素_2.wmv struts2/22_尚学堂马士兵_Struts2_访问Web元素_2.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/22_尚学堂马士兵_Struts2_访问Web元素_2.wmv@@@@@<br />
@@@@@struts2/22_尚学堂马士兵_Struts2_访问Web元素_2.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-web-servlet-2-449/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2_访问Web元素_1</title>
		<link>http://javadou.com/struts2-web-servlet-448/</link>
		<comments>http://javadou.com/struts2-web-servlet-448/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 10:15:28 +0000</pubDate>
		<dc:creator>阿超</dc:creator>
				<category><![CDATA[Struts2系列]]></category>
		<category><![CDATA[struts2]]></category>

		<guid isPermaLink="false">http://javadou.com/?p=448</guid>
		<description><![CDATA[struts2/21_尚学堂马士兵_Struts2_访问Web元素_1.wmv struts2/21_尚学堂马士兵_Struts2_访问Web元素_1.av... ]]></description>
			<content:encoded><![CDATA[<p>struts2/21_尚学堂马士兵_Struts2_访问Web元素_1.wmv@@@@@<br />
@@@@@struts2/21_尚学堂马士兵_Struts2_访问Web元素_1.avi</p>
]]></content:encoded>
			<wfw:commentRss>http://javadou.com/struts2-web-servlet-448/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
