﻿<?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-Knight of the round table-文章分类-Struts</title><link>http://www.blogjava.net/wansong/category/45576.html</link><description>wansong</description><language>zh-cn</language><lastBuildDate>Thu, 23 Dec 2010 18:52:26 GMT</lastBuildDate><pubDate>Thu, 23 Dec 2010 18:52:26 GMT</pubDate><ttl>60</ttl><item><title>jquery通过struts2请求，返回json数据，在jsp页面形成二级联动下拉列表</title><link>http://www.blogjava.net/wansong/articles/341344.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Wed, 22 Dec 2010 13:40:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/341344.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/341344.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/341344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/341344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/341344.html</trackback:ping><description><![CDATA[http://hardwin.javaeye.com/blog/498044
 <img src ="http://www.blogjava.net/wansong/aggbug/341344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2010-12-22 21:40 <a href="http://www.blogjava.net/wansong/articles/341344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 json jquery 集成详解</title><link>http://www.blogjava.net/wansong/articles/340943.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Fri, 17 Dec 2010 00:02:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/340943.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/340943.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/340943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/340943.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/340943.html</trackback:ping><description><![CDATA[<h3><a href="http://liyuandong.javaeye.com/blog/550120">jquery.xml2json.js&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
<br />
struts2 json jquery 集成详解</a></h3>
<strong>文章分类:<a style="padding-right: 10px; text-decoration: none" href="http://www.javaeye.com/blogs/category/web">Web前端</a></strong>
<div class="blog_content">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从以下网址<a href="http://code.google.com/p/jsonplugin/downloads/list" target="_blank">http://code.google.com/p/jsonplugin/downloads/list</a>下载JSON插件的JAR包（新版本是0.32），并加到工程的相应目录下。从如下网址<a href="http://docs.jquery.com/Downloading_jQuery" target="_blank">http://docs.jquery.com/Downloading_jQuery</a>下载jquery所需文件。(建议下载稳定版本，不然会出现莫名其妙的错误) <br />
2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置相应的xml文件，为ajax请求提供数据： <br />
&lt;?xml version="1.0" encoding="UTF-8" ?&gt; <br />
&lt;!DOCTYPE struts PUBLIC <br />
&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" <br />
&nbsp;&nbsp;&nbsp; "http://struts.apache.org/dtds/struts-2.0.dtd"&gt; <br />
&lt;struts&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;package name="sajax" extends="json-default" namespace="/book"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action name="getAjaxBookChannelList" method="getAjaxBookChannelList" class="bookChannelAction"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result type="json" /&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action name="getAjaxBookCategoryListByChannelID" method="getAjaxBookCategoryListByChannelID" class="bookChannelAction"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result type="json" /&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/package&gt; <br />
&lt;/struts&gt; <br />
配置有两处与通常的action配置不同，一处是扩展了json-default， json-default&#8221;是在jsonplugin-0.30.jar包里的struts-plugin.xml中定义的，文件内容如下： <br />
&lt;?xml version="1.0" encoding="UTF-8" ?&gt; <br />
<br />
&lt;!DOCTYPE struts PUBLIC <br />
&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" <br />
&nbsp;&nbsp;&nbsp; "http://struts.apache.org/dtds/struts-2.0.dtd"&gt; <br />
<br />
&lt;struts&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;package name="json-default" extends="struts-default"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result-types&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result-type name="json" class="com.googlecode.jsonplugin.JSONResult"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/result-types&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;interceptors&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;interceptor name="json" class="com.googlecode.jsonplugin.JSONInterceptor"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/interceptors&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/package&gt; <br />
&lt;/struts&gt; <br />
<br />
另一处是定义了返回类型为json&lt;result type="json" /&gt;，会将response中的返回数据转化为json对象。 <br />
3．在Action中的定义。定义返回对象，并添加get，set方法。返回的数据可以根据需要格式成json形式(json格式如{1:test,2:test})，比如为二级列表提供填充内容的的数据，在页面需要进行遍历，做成json形式的，在页面遍历时也会比较方便。Action代码（部分）如下： <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public String getAjaxBookChannelList() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer sb = new StringBuffer(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bookChannelList = bookService.getBookChannelList(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (bookChannelList.size() &gt; 0) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j = bookChannelList.size(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append("{"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; j; i++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BookChannel bc = (BookChannel) bookChannelList.get(i); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(bc.getId()); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(":"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append("\""); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(bc.getName()); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append("\""); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (i != (j - 1)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(","); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append("}"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strAjaxChannel = sb.toString();//返回的数据 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Action.SUCCESS; <br />
&nbsp;&nbsp;&nbsp; } <br />
<br />
<br />
4页面操作。Jquery中已经提供几供ajax请求的方法，如果返回的是json对象，使用jQuery.getJSON(url,[data],[callback])会比较方便， <br />
<br />
jQuery.getJSON(url,[data],[callback]) 通过 HTTP GET 请求载入 JSON 数据。 <br />
<br />
返回值 <br />
XMLHttpRequest <br />
<br />
参数 <br />
url (String) : 发送请求地址。 <br />
data (Map) : (可选) 待发送 Key/value 参数。 <br />
callback (Function) : (可选) 载入成功时回调函数。 <br />
<br />
参数部分，浏览器的缓存是以url为标识的，如果url相同会使用缓存中的数据，如果不想使用缓存，可以在参数中加入一个随机数。 <br />
<br />
jQuery.each(obj,callback) <br />
通用例遍方法，可用于例遍对象和数组 <br />
参数 <br />
object (Object) : 需要例遍的对象或数组。 <br />
callback (Function) : (可选) 每个成员/元素执行的回调函数。 <br />
回调函数拥有两个参数：第一个为对象的成员或数组的索引，第二个为对应变量或内容。 <br />
Jquery操作下拉列表添加选项的方法为: $(&#8220;# categoryId&#8221;)[0].options.add(option); <br />
<br />
页面代码如下（部分）： <br />
&lt;. language="." type="text/." src="/.s/jquery-1.2.2.js"&gt;&lt;/.&gt; <br />
&lt;. language="."&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function fillChannel(id){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var url = "/book/getAjaxBookChannelList.action"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $.getJSON(url,{ran:Math.random()},function(json){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(json.strAjaxChannel.length &gt; 0){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var obj = .('(' + json.strAjaxChannel + ')'); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $.each(obj,function(i,n){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option = new Option(n,i); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i==id)option.selected=true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("channellistId").options.add(option); <br />
&nbsp;&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;&nbsp; option = new Option("全部频道",999); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(id == 999)option.selected=true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("channellistId").options.add(option);&nbsp; <br />
&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; else{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option = new Option("暂无频道"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("channellistId").options.add(option); <br />
&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; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function fillCategory(chid,bid){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("categoryId").options.length=1; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var url = "/book/getAjaxBookCategoryListByChannelID.action"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var cid = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(chid &gt; 0){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cid = chid; <br />
&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; else{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cid = document.getElementById("channellistId").value; <br />
&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; $.getJSON(url,{channelID:cid,ran:Math.random()}, function(json){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //参数为频道ID及随机数，function(json)为回调函数，其中json为取到的返回数据 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(json.strAjaxCategory.length &gt; 0){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var obj = .('(' + json.strAjaxCategory + ')');//将json文本转化为json对象，以便于遍历 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $.each(obj,function(i,n){&nbsp; //jquery中的遍历方法， <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option = new Option(n,i); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i==bid)option.selected=true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("categoryId").options.add(option); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option = new Option("全部分类","-3"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(bid ==-3)option.selected=true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("categoryId").options.add(option); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //jquery的方法为:$(&#8220;# categoryId&#8221;)[0].options.add(option); <br />
&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; else{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(cid == 999){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option = new Option("全部分类","-1"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("categoryId").options.add(option);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option = new Option("暂无分类"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("categoryId").options.add(option); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&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; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function fillSelect(chid,cid){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fillChannel(chid); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fillCategory(chid,cid); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&lt;/.&gt; <br />
&lt;body &lt;s:if test="bookCategory.bookchannelId &gt;0"&gt;onLoad="fillSelect(&lt;s:property value="bookCategory.bookchannelId"/&gt;,&lt;s:property value="bookCategory.id"/&gt;);"&lt;/s:if&gt;&lt;s:if test="bookCategory==null"&gt;onLoad="fillChannel(0);"&lt;/s:if&gt;&gt; <br />
<br />
作品类别 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;select name="channellistId" id="channellistId" onChange="fillCategory(&lt;s:if test="bookCategory.bookchannelId &gt;0"&gt;0,&lt;/s:if&gt;&lt;s:property value="categoryId"/&gt;);"&gt;&lt;option&gt;选择频道&lt;/option&gt;&lt;/select&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;select name="categoryId" id="categoryId"&gt;&lt;option&gt;选择分类&lt;/option&gt;&lt;/select&gt; <br />
<br />
<br />
直接访问<a href="http://manager.17k.com/book/getAjaxBookChannelList.action" target="_blank">http://manager.17k.com/book/getAjaxBookChannelList.action</a> <br />
得到如下内容： <br />
{"ajaxBookCategoryListByChannelID":"success","ajaxBookChannelList":"success","bcID":0,"bchID":0,"bookCategory":null,"bookCategoryAllList":null,"bookCategoryByChannelID":"success","bookCategoryByID":null,"bookCategoryList":null,"bookCategoryListModel":null,"bookChannel":null,"bookChannelList":[{"createdate":"2008-07-09T10:23:36","id":1,"name":"畅销经典","prefix":"changxiao","status":0},{"createdate":"2008-07-09T10:24:03","id":2,"name":"玄幻奇幻","prefix":"yy","status":0},{"createdate":"2008-07-09T10:24:25","id":3,"name":"都市娱乐","prefix":"dushi","status":0},{"createdate":"2008-07-09T10:24:38","id":4,"name":"历史军事","prefix":"ss","status":0},{"createdate":"2008-07-09T10:24:54","id":5,"name":"女性时尚","prefix":"nvxing","status":0},{"createdate":"2008-07-09T10:25:11","id":6,"name":"游戏竞技","prefix":"dongman","status":0},{"createdate":"2008-07-09T10:25:24","id":7,"name":"恐怖灵异","prefix":"kongbu","status":0},{"createdate":"2008-07-09T10:25:35","id":8,"name":"文化社科","prefix":"www","status":0},{"createdate":"2008-07-09T10:25:46","id":9,"name":"经管励志","prefix":"www","status":0}],"channelID":0,"currentPage":0,"info":"","msg":"","pageSize":0,"srcID":0,"strAjax":"","strAjaxCategory":"","strAjaxChannel":"{1:\"畅销经典\",2:\"玄幻奇幻\",3:\"都市娱乐\",4:\"历史军事\",5:\"女性时尚\",6:\"游戏竞技\",7:\"恐怖灵异\",8:\"文化社科\",9:\"经管励志\"}","tarID":0,"theBookCategory":"success","theBookChannel":"success","toID":0} <br />
<br />
<br />
<br />
<br />
关于jsonplugin序列化的几点： <br />
a.对于不想被序列化的属性，可以在他的get方法前加注释：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @JSON(serialize=false) <br />
b.对于想改变json结果属性名称的，可以在他的get方法前加注释@JSON(name="属性名") <br />
c. 带有transient修饰符与没有Getter方法的字段（field）都不会被串行化为JSON。 <br />
</div>
<script type="text/javascript"><!-- google_ad_client="pub-1076724771190722" ;
/* JE个人博客468x60 */ google_ad_slot="5506163105" ; google_ad_width="468;
google_ad_height" = 60;
//-->
</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script src="http://pagead2.googlesyndication.com/pagead/js/r20101117/r20101214/show_ads_impl.js"></script><script src="http://pagead2.googlesyndication.com/pagead/expansion_embed.js"></script><script src="http://googleads.g.doubleclick.net/pagead/test_domain.js"></script><script src="http://pagead2.googlesyndication.com/pagead/render_ads.js"></script><script>google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);</script>
<img src ="http://www.blogjava.net/wansong/aggbug/340943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2010-12-17 08:02 <a href="http://www.blogjava.net/wansong/articles/340943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OGNL practice</title><link>http://www.blogjava.net/wansong/articles/336339.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Thu, 28 Oct 2010 00:26:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/336339.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/336339.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/336339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/336339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/336339.html</trackback:ping><description><![CDATA[http://www.ibm.com/developerworks/cn/opensource/os-cn-ognl/index.html<br />
<br />
http://www.opensymphony.com/ognl/<br />
http://www.opensymphony.com/ognl/api<br />
<br />
Ognl.getValue("#root.{? #this.parentId == " <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ userOrganId + "}", <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constant.AllORGANS); 
<img src ="http://www.blogjava.net/wansong/aggbug/336339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2010-10-28 08:26 <a href="http://www.blogjava.net/wansong/articles/336339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 struts2 比较</title><link>http://www.blogjava.net/wansong/articles/334981.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Wed, 13 Oct 2010 00:33:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/334981.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/334981.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/334981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/334981.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/334981.html</trackback:ping><description><![CDATA[http://www.javaeye.com/topic/21971
<img src ="http://www.blogjava.net/wansong/aggbug/334981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2010-10-13 08:33 <a href="http://www.blogjava.net/wansong/articles/334981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts 1 validate</title><link>http://www.blogjava.net/wansong/articles/332660.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Wed, 22 Sep 2010 14:11:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/332660.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/332660.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/332660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/332660.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/332660.html</trackback:ping><description><![CDATA[Struts-config.xml:::::::::::::::::::<br />
&lt;plug-in className="org.apache.struts.validator.ValidatorPlugIn"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plug-in&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
<br />
<br />
validation.xml:::::::::::::<br />
&lt;formset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- An example form --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form name="crudForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field property="name" depends="required"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;arg key="crudform.name"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/formset&gt;<br />
<br />
jsp::::::::::<br />
<p>&lt;html:javascript formName="crudForm" dynamicJavascript="true" staticJavascript="true"/&gt;</p>
<p>&lt;div id="crudDetailDialog"&gt;<br />
&nbsp;&lt;html:form action="/save.do" method="POST" styleId="crudForm" &gt;<br />
&nbsp;&nbsp;&lt;div id="crudDetailValidationMessages"&gt;&lt;html:errors/&gt;&lt;/div&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;CrudId:&lt;html:text property="crudId" /&gt; <br />
&nbsp;&nbsp;Name: &lt;html:text property="name" /&gt; <br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;input name="submit" type="submit" value='login' &gt;<br />
&nbsp;&lt;/html:form&gt;<br />
&lt;/div&gt;</p>
<br />
form:::::::::::::::::::::::<br />
CRUDForm extends ValidatorForm {
<img src ="http://www.blogjava.net/wansong/aggbug/332660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2010-09-22 22:11 <a href="http://www.blogjava.net/wansong/articles/332660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts 1 校验</title><link>http://www.blogjava.net/wansong/articles/332659.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Wed, 22 Sep 2010 14:08:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/332659.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/332659.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/332659.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/332659.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/332659.html</trackback:ping><description><![CDATA[http://hi.baidu.com/ln_software/blog/item/54e0838021d7c3a90df4d227.html<br />
http://lucky16.javaeye.com/blog/450144<br />
<a href="http://www.javaeye.com/topic/154151">http://www.javaeye.com/topic/154151</a><br />
<br />
如这样的500错误：No input attribute for mapping path.&nbsp; Validator要求页面做验证 <br />
解决办法一: <br />
在struts_config.xml里的&lt;action里加入input <br />
解决办法二: <br />
把struts_config.xml里的&lt;action里的validator改成false <br />
<br />
<br />
<br />
<p>Struts作为一个不停发展的开源项目，在页面校验这一块采用了Jakarta的Commons项目的Validate，结合Struts的MVC体系，<br />
用起来确实不错。建议校验这部分在完成jsp后加入。<br />
原理：Struts的页面校验分两种方法，一种是前台生成Javascript，一种是后台class。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而出错信息对应的也有两种显示方法，一种是弹出消息框，一种是在原页面显示。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我个人比较喜欢弹出消息框这种，因为可以将焦点置到出错的field中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以我侧重介绍如何实现这种。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 请按下列步骤一步一步进行，进行的时候思考它的做法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
1&nbsp;&nbsp;&nbsp;&nbsp; 将Struts所需lib加入到项目lib路径或服务器的lib路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Struts1.1需要如下lib：struts-legacy.jar struts.jar jakarta-oro.jar commons-validator.jar <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; commons-logging.jar commons-lang.jar commons-fileupload.jar commons-digester.jar commons-collections.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; commons-beanutils.jar(可以看到Struts1.1用了很多Commons项目的东东)<br />
2&nbsp;&nbsp;&nbsp;&nbsp; 将下载的Struts1.1的包中的webapps\struts-validator.war 中的validation.xml和validator-rules.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 拷到项目的WEB-INF路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仔细研究一下这两个文件，可以看到validator-rules.xml是提供一些常用的validation规则。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前提供了required，requiredif,minlength,maxlength,mask,byte,short,integer,long,float,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double,date,range,intRange,floatRange,creditCard,email,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我看了一下，只有mask不知道具体是干啥的，其他望文生义。(至于如何DIY一条自己的rule，俺还不会)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重头戏来了，修改validation.xml。可以看一下validation.xml结构<br />
validation.xml：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;</p>
<p>&lt;!DOCTYPE form-validation PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href="http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">http://jakarta.apache.org/commons/dtds/validator_1_0.dtd</a>"&gt;</p>
<p>&lt;form-validation&gt;<br />
&nbsp;&nbsp; &lt;global&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant-name&gt;phone&lt;/constant-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant-value&gt;^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$&lt;/constant-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/constant&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant-name&gt;zip&lt;/constant-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant-value&gt;^\d{5}\d*$&lt;/constant-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/constant&gt;<br />
&nbsp;&nbsp; &lt;/global&gt;<br />
&nbsp;&nbsp; &lt;formset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant-name&gt;zip&lt;/constant-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant-value&gt;^\d{5}(-\d{4})?$&lt;/constant-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/constant&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form&nbsp;&nbsp;&nbsp; name="registrationForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field&nbsp;&nbsp;&nbsp; property="firstName"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; depends="required,mask,minlength"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;arg0 key="registrationForm.firstname.displayname"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;arg1 name="minlength" key="${var:minlength}" resource="false"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var-name&gt;mask&lt;/var-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var-value&gt;^\w+$&lt;/var-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/var&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var-name&gt;minlength&lt;/var-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var-value&gt;5&lt;/var-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/var&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ..........<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相信大家仔细一看就明白了,首先，可以定义一些用正则表达式表示的规则，这些规则还分全局和局部。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样就可以DIY一些可以用正则表达式表示的规则了，例如下面就具体用到了自定义的规则:phone。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp; &lt;global&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant-name&gt;phone&lt;/constant-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant-value&gt;^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$&lt;/constant-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/constant&gt;<br />
&nbsp;&nbsp; &lt;/global&gt;<br />
&nbsp;&nbsp; ...&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field&nbsp;&nbsp;&nbsp; property="mobile"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; depends="mask"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;arg0 key="registrationForm.mobile.displayname"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var-name&gt;mask&lt;/var-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var-value&gt;${phone}&lt;/var-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/var&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这下也明白mask的作用了，原来它是专门用于自定义规则！<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后就可以添加需要加validation的field了，格式如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;formset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form name="registrationForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field&nbsp;&nbsp;&nbsp; property="firstName"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; depends="required,mask,minlength"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;arg0 key="registrationForm.firstname.displayname"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;arg1 name="minlength" key="${var:minlength}" resource="false"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var-name&gt;mask&lt;/var-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var-value&gt;^\w+$&lt;/var-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/var&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var-name&gt;minlength&lt;/var-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;var-value&gt;5&lt;/var-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/var&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/formset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
3&nbsp;&nbsp;&nbsp;&nbsp; 将需要加validation的formbean全部改成 extends ValidatorForm<br />
4&nbsp;&nbsp;&nbsp;&nbsp; 在struts-config.xml文件中加入一段代码&lt;plug-in&gt;&lt;/plug-in&gt;，位置如下：<br />
......<br />
&nbsp;&nbsp;&nbsp; &lt;action name="performanceSearchForm" path="/performanceRptAction" scope="request" type="com.hp.elog2.action.report.PerformanceRptAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/FinalRpt.jsp" redirect="false" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp; &lt;/action-mappings&gt;<br />
&nbsp; &lt;message-resources parameter="ApplicationResources" /&gt;<br />
&nbsp; &lt;plug-in className="org.apache.struts.validator.ValidatorPlugIn"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /&gt;<br />
&nbsp; &lt;/plug-in&gt;<br />
&lt;/struts-config&gt;</p>
<p>5&nbsp;&nbsp;&nbsp;&nbsp; 在ApplicationResources.properties文件中加入如下内容:</p>
<p># Errors<br />
errors.header=Validation Error<br />
errors.required={0} is required.<br />
errors.minlength={0} can not be less than {1} characters.<br />
errors.maxlength={0} can not be greater than {1} characters.<br />
errors.invalid={0} is invalid.<br />
errors.byte={0} must be an byte.<br />
errors.short={0} must be an short.<br />
errors.integer={0} must be an integer.<br />
errors.long={0} must be an long.<br />
errors.float={0} must be an float.<br />
errors.double={0} must be an double.<br />
errors.date={0} is not a date.<br />
errors.range={0} is not in the range {1} through {2}.<br />
errors.creditcard={0} is not a valid credit card number.<br />
errors.email={0} is an invalid e-mail address.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 且注意在修改validation.xml时，如<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;arg0 key="registrationForm.firstname.displayname"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 则ApplicationResources.properties中要有对应的 registrationForm.firstname.displayname 值。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这就可以实现出错信息本地化。</p>
<p>6&nbsp;&nbsp;&nbsp;&nbsp; 修改要加validation的jsp文件。两处：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 在页面的form标签中加入onsubmit事件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:form action="registration" onsubmit="return validateRegistrationForm(this);"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 在&lt;/body&gt;之前加入一段代码，内容如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:javascript formName="registrationForm"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这段代码会自动生成上面的validateRegistrationForm(this)函数<br />
</p>
<img src ="http://www.blogjava.net/wansong/aggbug/332659.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2010-09-22 22:08 <a href="http://www.blogjava.net/wansong/articles/332659.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 关于OGNL的%#$的应用</title><link>http://www.blogjava.net/wansong/articles/326925.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Fri, 23 Jul 2010 04:32:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/326925.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/326925.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/326925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/326925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/326925.html</trackback:ping><description><![CDATA[http://hi.baidu.com/zhouhwbuaa/blog/item/b9b23bfbd478ab106c22eb0e.html<br />
<br />
http://wallboy.javaeye.com/blog/513096&nbsp; <a href="http://wallboy.javaeye.com/blog/513096">OGNL表达式语言介绍 </a><br />
<br />
<br />
访问OGNL上下文和Action上下文，#相当于ActionContext.getContext()；下表有几个ActionContext中有用的属性：&nbsp;&nbsp; 名称 作用 例子 <br />
parameters 包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameter("id") <br />
request 包含当前HttpServletRequest的属性（attribute)的Map #request.userName相当于request.getAttribute("userName") <br />
session 包含当前HttpSession的属性（attribute）的Map #session.userName相当于session.getAttribute("userName") <br />
application 包含当前应用的ServletContext的属性（attribute）的Map #application.userName相当于application.getAttribute("userName") <br />
attr 用于按request &gt; session &gt; application顺序访问其属性（attribute） #attr.userName相当于按顺序在以上三个范围（scope）内读取userName属性，直到找到为止 <br />
<br />
用于过滤和投影（projecting)集合，如books.{?#this.price&lt;100}； <br />
构造Map，如#{'foo1':'bar1', 'foo2':'bar2'}。 <br />
<br />
&#8220;%&#8221;符号的用途是在标志的属性为字符串类型时，计算OGNL表达式的值。<br />
&#8220;$&#8221;有两个主要的用途，用于在国际化资源文件中，引用OGNL表达式。在Struts 2配置文件中，引用OGNL表达式。<br />
<br />
<br />
<br />
Struts2中的OGNL表达式语言是对Xwork的OGNL的封装。我们要理解一下几点： <br />
1． Struts2中将ActionContext作为OGNL的上下文环境（ActionContext内部含有一个Map对象） <br />
2． Struts2中的OGNL表达式语言的根对象是一个ValueStack，ValueStack中的每一个对象都被视为根对象。 <br />
Struts2框架将实例化的Action对象放入ValueStack中，如果是Action链，则多个Action都存在于 ValueStack中。而ValueStack中除了Action外，Struts2框架还将 parameters，request，response，session，application，attr等对象放到ValueStack中，访问这些对象需要加前缀#。 <br />
<br />
总结：Struts2中的数据处理基于Xwork的OGNL，它在OGNL的基础上进行了一定的封装。OGNL的核心概念是根对象(root)和上下文环境(context)---你可以传入一个Map对象作为上下文，向其中put进一个对象，那么这个对象可以作为根对象（ognl中可以向函数中传入不同的Map对象作为根对象来操作，也可以指定不同的根对象，而Struts2中，它固定了根对象ValueStack）。在Struts2 中，ActionContext作为OGNL的上下文环境，它的根对象是一个ValueStack，ValueStack中的每个对象都被视为根对象。 Struts2中的Action作为根对象存在(如果多个Action以chain的形式存在，则多个Action均存在于ValueStack中，均为根对象)。 <br />
<br />
<br />
&lt;s:property value="user.name" /&gt; <br />
<br />
&lt;s:property value="%{#application.myApplicationAttribute}" /&gt; <br />
&lt;s:property value="%{#session.mySessionAttribute}" /&gt; <br />
&lt;s:property value="%{#request.myRequestAttribute}" /&gt; <br />
&lt;s:property value="%{#parameters.myParameter}" /&gt; <br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/wansong/aggbug/326925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2010-07-23 12:32 <a href="http://www.blogjava.net/wansong/articles/326925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts tips</title><link>http://www.blogjava.net/wansong/articles/326906.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Fri, 23 Jul 2010 02:26:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/326906.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/326906.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/326906.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/326906.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/326906.html</trackback:ping><description><![CDATA[<span style="color: #000000;"> </span><span style="color: #0000ff;">http://book.csdn.net/bookfiles/479/10047916715.shtml&nbsp;&nbsp; </span><a href="http://book.csdn.net/bookfiles/479/10047916715.shtml">Struts 2的基本配置&nbsp;
</a><br />
<span style="color: #0000ff;"><br />
&lt;</span> <span style="color: #800000;">action </span><span style="color: #ff0000;">name</span> <span style="color: #0000ff;">="Login"</span> <span style="color: #ff0000;">class</span> <span style="color: #0000ff;">="tutorial.Login"</span> <span style="color: #0000ff;">&gt;</span> <span style="color: #000000;"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><strong><span style="color: #0000ff;"><span style="background-color: #0c0000;"><span style="color: #0000ff;">&lt;</span> <span style="color: #800000;">result </span><span style="color: #ff0000;">type</span> <span style="color: #0000ff;">="chain"</span> <span style="color: #0000ff;">&gt;</span></span></span> </strong><span style="color: #000000;">AuthorizatedAccess</span> <span style="color: #0000ff;">&lt;/</span> <span style="color: #800000;">result</span> <span style="color: #0000ff;">&gt;</span> <span style="color: #000000;"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff;">&lt;/</span> <span style="color: #800000;">action</span> <span style="color: #0000ff;">&gt;</span> <span style="color: #000000;"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff;">&lt;</span> <span style="color: #800000;">action </span><span style="color: #ff0000;">name</span> <span style="color: #0000ff;">="AuthorizatedAccess"</span> <span style="color: #ff0000;">class</span> <span style="color: #0000ff;">="tutorial.AuthorizatedAccess"</span> <span style="color: #0000ff;">&gt;</span> <span style="color: #000000;"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff;">&lt;</span> <span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span> <span style="color: #0000ff;">="auth"</span> <span style="color: #0000ff;">/&gt;</span> <span style="color: #000000;"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff;">&lt;</span> <span style="color: #800000;">result </span><span style="color: #ff0000;">name</span> <span style="color: #0000ff;">="login"</span> <span style="color: #0000ff;">&gt;</span> <span style="color: #000000;">/Login.jsp</span> <span style="color: #0000ff;">&lt;/</span> <span style="color: #800000;">result</span> <span style="color: #0000ff;">&gt;</span> <span style="color: #000000;"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff;">&lt;</span> <span style="color: #800000;">result </span><span style="color: #ff0000;">name</span> <span style="color: #0000ff;">="success"</span> <span style="color: #0000ff;">&gt;</span> <span style="color: #000000;">/ShowRole.jsp</span> <span style="color: #0000ff;">&lt;/</span> <span style="color: #800000;">result</span> <span style="color: #0000ff;">&gt;</span> <span style="color: #000000;"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff;">&lt;/</span> <span style="color: #800000;">action</span> <span style="color: #0000ff;">&gt;</span> <span style="color: #000000;"><br />
<br />
<br />
In struts2-showcase project:<br />
&lt;default-action-ref name="showcase" /&gt;<br />
&lt;action name="showcase"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result&gt;showcase.jsp&lt;/result&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
<br />
In struts-default.xml of struts-core:<br />
&lt;default-interceptor-ref name="defaultStack"/&gt;<br />
&lt;default-class-ref class="com.opensymphony.xwork2.ActionSupport" /&gt;<br />
</span>
<img src ="http://www.blogjava.net/wansong/aggbug/326906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2010-07-23 10:26 <a href="http://www.blogjava.net/wansong/articles/326906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 流程 架构图</title><link>http://www.blogjava.net/wansong/articles/325953.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Tue, 13 Jul 2010 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/325953.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/325953.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/325953.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/325953.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/325953.html</trackback:ping><description><![CDATA[http://secyaher.blog.163.com/blog/static/38955772009610113458949/
<img src ="http://www.blogjava.net/wansong/aggbug/325953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2010-07-13 14:30 <a href="http://www.blogjava.net/wansong/articles/325953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>