ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品国产精品粉嫩,久久久噜噜噜久久人人看,亚洲男人的天堂在线aⅴ视频http://www.aygfsteel.com/jzone/category/40407.htmljava web, java wap ..My laboratory..zh-cnWed, 08 Sep 2010 19:46:23 GMTWed, 08 Sep 2010 19:46:23 GMT60OGNL功用åQï¼åQ?/title><link>http://www.aygfsteel.com/jzone/articles/331427.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Wed, 08 Sep 2010 12:34:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/331427.html</guid><description><![CDATA[ <span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®å€¼æ ˆä¸­çš„action的普通属æ€?username = <s:property value="username"/>    </span> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®å€¼æ ˆä¸­å¯¹è±¡çš„æ™®é€šå±žæ€?get setæ–ÒŽ³•)åQ?/span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><s:property value="user.age"/> </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><s:property value="user['age']"/></span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><s:property value="user[""age""]"/></span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">wrong: <%--<s:property value="user[age]"/>--%>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®å€¼æ ˆä¸­å¯¹è±¡çš„æ™®é€šå±žæ€?get setæ–ÒŽ³•):</span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"> <s:property value="cat.friend.name"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®å€¼æ ˆä¸­å¯¹è±¡çš„æ™®é€šæ–¹æ³•:<s:property value="password.length()"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®å€¼æ ˆä¸­å¯¹è±¡çš„æ™®é€šæ–¹æ³•:<s:property value="cat.miaomiao()" />   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®å€¼æ ˆä¸­action的普通方法:<s:property value="m()" /> </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®é™æ€æ–¹æ³•:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®é™æ€å±žæ€§ï¼š<s:property value="@com.bjsxt.struts2.ognl.S@STR"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®Math¾cȝš„静态方法:<s:property value="@@max(2,3)" />   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®æ™®é€šç±»çš„æž„造方法:</span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><s:property value="new com.bjsxt.struts2.ognl.User(8)"/> </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®List:<s:property value="users"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®List中某个元ç´?<s:property value="users[1]"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®List中元素某个属性的集合:<s:property value="users.{age}"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®List中元素某个属性的集合中的特定å€?</span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><s:property value="users.{age}[0]"/></span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><s:property value="users[0].age"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®Set:<s:property value="dogs"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®Set中某个元ç´?<s:property value="dogs[1]"/></span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><!--set</span><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">是没有顺序的åQŒæ‰€ä»¥å–下标值是没有意义çš?->  </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®Map:<s:property value="dogMap"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®Map中某个元ç´?<s:property value="dogMap.dog101"/></span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><s:property value="dogMap['dog101']"/></span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><s:property value="dogMap[""dog101""]"/><!--</span><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">取出key为dog101çš„å€?->   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®Map中所有的key:<s:property value="dogMap.keys"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®Map中所有的value:<s:property value="dogMap.values"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">讉K—®å®¹å™¨çš„大ž®ï¼š<s:property value="dogMap.size()"/></span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><s:property value="users.size"/> <!--</span><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">不加ku9ohao也可以访é—?-> </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">投媄(˜q‡æ×o)åQ?lt;s:property value="users.{?#this.age==1}[0]"/><!--格式固定åQŒthis指åó@环过½E‹ä¸­çš„æ¯ä¸€ä¸ªå¯¹è±¡ã€‚取出users里age½{‰äºŽ1的集合里面的½W¬ä¸€ä¸ªå…ƒç´?->   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">投媄åQ?lt;s:property value="users.{^#this.age>1}.{age}"/><!--^指第一个元ç´?->   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">投媄åQ?lt;s:property value="users.{$#this.age>1}.{age}"/><!--$指结ž®„¡š„元素-->   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">投媄åQ?lt;s:property value="users.{$#this.age>1}.{age} == null"/><!--查看age>1çš„userçš„age是否为空--></span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"> []:<s:property value="[0].username"/>   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><!--</span><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">指value stack栈顶的那个ActionåQŒå› ä¸ºaction在栈™å¶ã€?值value stack从上往下数的第å‡?个元ç´?-->   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><!--[0]</span><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">代表action的位¾|®ï¼Œè€Œä¸æ˜¯action那个对象åQŒ[0]代表ä»?往下数到栈底的对象的集合ã€?->   </span></p> <p><span style="font-size: 10pt; font-family: å¾®èÊY雅黑"><!--[0].username</span><span style="font-size: 10pt; font-family: å¾®èÊY雅黑">åQŒå¦‚果有多个actionåQŒåœ¨½W¬ä¸€ä¸ªaction里找不到[0].usernameåQŒä¼šå¾€ä¸‹æ‰¾-->   </span></p> <img src ="http://www.aygfsteel.com/jzone/aggbug/331427.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-09-08 20:34 <a href="http://www.aygfsteel.com/jzone/articles/331427.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2中解决一个表单多¿Uæäº?/title><link>http://www.aygfsteel.com/jzone/articles/322934.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 06 Jun 2010 16:50:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/322934.html</guid><description><![CDATA[<a href="http://www.aygfsteel.com/nokiaguy/archive/2008/04/16/193287.html">http://www.aygfsteel.com/nokiaguy/archive/2008/04/16/193287.html</a> <p><span style="font-size: 10pt; color: blue; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: maroon; font-family: 'Courier New'">s:form </span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">action</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="submit.action"</span> <span style="font-size: 10pt; color: blue; font-family: 'Courier New'">></span><span style="font-size: 10pt; color: black; font-family: 'Courier New'"><br /> </span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: maroon; font-family: 'Courier New'">s:textfield </span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="param"</span><span style="font-size: 10pt; color: red; font-family: 'Courier New'"> label</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">content</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">"/></span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">  <br /> </span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: maroon; font-family: 'Courier New'">s:submit </span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="method1"</span><span style="font-size: 10pt; color: red; font-family: 'Courier New'"> value</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="</span><span style="font-size: 10pt; color: blue; font-family: 宋体">æ–ÒŽ³•一</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">"</span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">  method</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="method1"/></span><span style="font-size: 10pt; color: black; font-family: 'Courier New'"><br /> </span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: maroon; font-family: 'Courier New'">s:submit </span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">=" method1"</span><span style="font-size: 10pt; color: red; font-family: 'Courier New'"> value</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="</span><span style="font-size: 10pt; color: blue; font-family: 宋体">æ–ÒŽ³•äº?/span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">"</span><span style="font-size: 10pt; color: red; font-family: 'Courier New'"> method</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="method1"</span> <span style="font-size: 10pt; color: blue; font-family: 'Courier New'">/></span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">      <br /> </span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: maroon; font-family: 'Courier New'">s:form</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">></span></p> <img src ="http://www.aygfsteel.com/jzone/aggbug/322934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-06-07 00:50 <a href="http://www.aygfsteel.com/jzone/articles/322934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2验证错误信息的两个经典方æ³?addFieldError&addActionErrorhttp://www.aygfsteel.com/jzone/articles/322603.htmlGavin.leeGavin.leeThu, 03 Jun 2010 03:45:00 GMThttp://www.aygfsteel.com/jzone/articles/322603.html˜q™ä¸¤ä¸ªæ–¹æ³•都æ˜?/span>ActionSupport¾cÕd®žçŽ°çš„æ–ÒŽ³•åQŒåº”用中我们都会¾l§æ‰¿ActionSupport¾c»ï¼Œåœ?/span>ActionSupport¾cÖM¸­å®žçŽ°äº†ä¸€ä¸?/span>hasErrors()æ–ÒŽ³•åQŒè¯¥æ–ÒŽ³•会判断是否存在这两种¾U§åˆ«(Action¾U§å’ŒField¾U?/span>)çš?/span>erroråQŒæ‰€ä»¥å½“我们需要报错时åQŒæˆ‘们可以方便的应用åQšå¦‚

try {

   XXX

} catch (Exception e) {

   Super.addFieldError(“username”, “输入有误”);

   或者:

   Super.addActionError(“输入有误”);

}

感兴­‘£å¯ä»¥ç ”½I¶ä¸€ä¸‹æºç ï¼Œä½¿ç”¨æ—¶æˆ‘们只需要在™åµé¢æ˜„¡¤º˜q™äº›é”™è¯¯ž®?/span>OKã€?/span>

如:

<s:fielderror>

   <s:param>username</s:param>

</s:fielderror>

或�/span>

<s:actionerror/>

但是在实际应用中åQ?/span>fielderror我们比较們֐‘于有针对性的错误信息输出åQŒå› ä¸?/span>fielderror它本íw«å°±æ˜¯ä¸ªMapåQŒå¯ä»¥è¯¦¾l†æŒ‡å®šé”™è¯¯çš„字段-原因。而且在表单提交时更合适,只要对应äº?/span>error字段和提交属性的字段ã€?/span>Struts2ä¼šäØ“æˆ‘ä»¬è‡ªåŠ¨è¡¨æ ¼æŽ’ç‰ˆ(没试éª?/span>)

修改主题:<s:form theme="simple"> 不能昄¡¤ºé”™è¯¯ä¿¡æ¯,不能自动æ·ÕdŠ è¡¨æ ¼æŽ’ç‰ˆ,æ ÒŽ®éœ€è¦è‡ªå·±å‘æŒ?/span>

注:我们只需要进行设¾|?/span>error的默è®?/span>inputåQ?/span>Struts2ä¼šäØ“æˆ‘ä»¬è‡ªåŠ¨˜q›è¡Œè§†å›¾è½¬å‘åQ?/span><result name=”input”>/input.jsp</result>



]]>
Struts2 Result-typeåQˆå°è£…Action层到View层的跌™{逻辑åQ?/title><link>http://www.aygfsteel.com/jzone/articles/322222.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 29 May 2010 09:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/322222.html</guid><description><![CDATA[     摘要: Struts2ž®†Resultåˆ—äØ“ä¸€ä¸ªç‹¬ç«‹çš„å±‚æ¬¡åQŒå¯ä»¥è¯´æ˜¯æ•´ä¸ªStruts2çš„Action层架构设计中的另外一个精华所在。Result之所以成ä¸ÞZ¸€ä¸ªå±‚‹Æ¡ï¼Œå…¶å®ž æ˜¯äØ“äº†è§£å†³MVC框架中,如何从Control层è{向View层这样一个问题而存在的   在struts2-core.jar/struts-default.xml中,我们可以扑ֈ°å…³äºŽresult-type的一些配¾|®ä¿¡æ¯ï¼Œä»Žä¸­...  <a href='http://www.aygfsteel.com/jzone/articles/322222.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jzone/aggbug/322222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-29 17:36 <a href="http://www.aygfsteel.com/jzone/articles/322222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Struts2中以IOC和非IOC方式获取session&requesthttp://www.aygfsteel.com/jzone/articles/322218.htmlGavin.leeGavin.leeSat, 29 May 2010 08:55:00 GMThttp://www.aygfsteel.com/jzone/articles/322218.htmlåœ?/span>struts1中,获得到系¾lŸçš„request或è€?/span>session对象非常方便åQŒéƒ½æ˜¯æŒ‰ç…§åŞ参传递的åQŒä½†æ˜¯åœ¨struts2中,requestå’?/span>session都被隐藏äº?/span>

struts提供两种方式讉K—®sessionå’?/span>requeståQŒå…¶ä¸­æ¯”较常用的是利ç”?/span>SPRING里面所说的IOCåÏxŽ§åˆ¶åè½?/span>

IOC方式åQ?/span>

action¾cÕd®žçŽ?/span>ServletRequestAware接口åQŒåƈ新徏一ä¸?/span>HttpServletRequest request

public class UserLoginAction extends ActionSupport implements ServletRequestAware {

public void setServletRequest(HttpServletRequest request) {

this.request=request;

}

然后可以生成çš?/span>request得到对象åQŒå¦‚request.getRemoteAddr()

action¾cÕd®žçŽ?/span>SessionAware接口åQŒåƈ创徏一ä¸?/span>MAP对象session

public class UserLoginAction extends ActionSupport implements ServletRequestAware,SessionAware{

public void setServletRequest(HttpServletRequest request) {

this.request=request;

}

public void setSession(Map session) {

this.session=session; 

}

�/span>Ioc方式

˜q™ç§æ–¹å¼ä¸»è¦æ˜¯åˆ©ç”¨äº†com.opensymphony.xwork2.ActionContext¾cÖM»¥å?/span>org.apache.struts2.ServletActionContext¾c»ï¼Œå…·ä½“的方法如下所½Cºã€?/span>

获得request对象åQ?/span>

A. HttpServletRequest request = ServletActionContext.getRequest ();

BåQ?/span>ActionContext ct = ActionContext.getContext()

   HttpServletRequest request = (HttpServletRequest)ct.get(ServletActionContext. HTTP_REQUEST );

获得session对象åQ?/span>

åœ?/span>Struts2中底层的session都被ž®è£…成了Map¾cÕdž‹åQŒæˆ‘ä»¬ç§°ä¹‹äØ“SessionMapåQŒè€Œåã^常我们所说的session则是æŒ?/span>HttpSession对象åQŒå…·ä½“的获得æ–ÒŽ³•如下所½Cºã€?/span>

AåQ?/span>Map session = ActionContext.getSession();

BåQ?/span>Map session = (Map)ActionContext.getContext().get(ActionContext.SESSION);

得到˜q™ä¸ªSessionMap之后我们ž®±å¯ä»¥å¯¹session˜q›è¡Œè¯Õd†™äº†ï¼Œå¦‚果我们惛_¾—到原始的HttpSession可以首先得到HttpServletRequest对象åQŒç„¶åŽé€šè¿‡request.getSession()来取得原始的HttpSession对象。一般情况下SessionMap已经可以完成所有的工作åQŒæˆ‘们不必再åŽÈ¢°åº•层çš?/span>session了ã€?/span>



]]>
采用url链接形式提交actionåQˆéžs:from方式提交åQ?/title><link>http://www.aygfsteel.com/jzone/articles/322215.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 29 May 2010 08:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/322215.html</guid><description><![CDATA[<p><span style="font-size: 10pt; font-family: 宋体">在我们日常开发中åQŒåƈ不是都适合</span><span style="font-size: 10pt; font-family: 'Courier New'">form</span><span style="font-size: 10pt; font-family: 宋体">提交åQŒå¦‚在无¾U¿ç½‘¾lœé¢†åŸŸï¼Œä½¿ç”¨</span><span style="font-size: 10pt; font-family: 'Courier New'">form</span><span style="font-size: 10pt; font-family: 宋体">提交会导致部分手机无法解析该标签åQŒè¿™æ—¶å€™ï¼Œæˆ‘们可爱çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">url</span><span style="font-size: 10pt; font-family: 宋体">链接提交ž®×ƒ¼šå¾—到更广泛的应用äº?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">1. </span></strong><strong><span style="font-size: 10pt; font-family: 宋体">标准çš?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">WML1.0</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">表单提交格式</span></strong></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">anchor</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span><span style="font-size: 10pt; color: black; font-family: 宋体">提交</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">go</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">href</span><span style="color: black">=</span>"<span style="color: teal"><</span><span style="color: #3f7f7f">s:url</span> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">'/wap/postParams.action</span></em><span style="color: teal">/></span>" <span style="color: #7f007f">method</span><span style="color: black">=</span><em><span style="color: #2a00ff">"get"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">postfield</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"param1"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"$(param1)"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">postfield</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"param2"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"$(param2)"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">postfield</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token.name"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">postfield</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span>"<span style="color: black">${sessionScope['struts.token'] }</span>"<span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">go</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">anchor</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">2. </span></strong><strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"><a href=””></a></span></strong><strong><span style="font-size: 10pt; color: black; font-family: 宋体">å’?/span></strong><strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"><s:url /></span></strong><strong><span style="font-size: 10pt; color: black; font-family: 宋体">完成链接效果</span></strong></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">a</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">href</span><span style="color: black">=</span>'</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">    <span style="color: teal"><</span><span style="color: #3f7f7f">s:url</span> <span style="color: #7f007f">action</span><span style="color: black">=</span><em><span style="color: #2a00ff">"postParams"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">       <span style="color: teal"><</span><span style="color: #3f7f7f">s:param</span> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"param1"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"#stu.id"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">       <span style="color: teal"><</span><span style="color: #3f7f7f">s:param</span> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token.name"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">       <span style="color: teal"><</span><span style="color: #3f7f7f">s:param</span> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span>"<span style="color: black">${sessionScope['struts.token']}</span>" <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">    <span style="color: teal"></</span><span style="color: #3f7f7f">s:url</span><span style="color: teal">></span>'<span style="color: teal">></span></span></p> <p><span style="font-size: 10pt; color: black; font-family: 宋体">提交</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">a</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">3</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">åQ?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'"><s:a /> </span></strong><strong><span style="font-size: 10pt; font-family: 宋体">å’?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'"> <s:url /></span></strong><strong><span style="font-size: 10pt; font-family: 宋体">一起完成链接提äº?/span></strong></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">s:url</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">id</span><span style="color: black">=</span><em><span style="color: #2a00ff">"toUrl"</span></em> <span style="color: #7f007f">action</span><span style="color: black">=</span><em><span style="color: #2a00ff">"postParams"</span></em> <span style="color: #7f007f">namespace</span><span style="color: black">=</span><em><span style="color: #2a00ff">"/wap"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:param</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"param1"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"%{param1}"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:param</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"param2"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"%{param2}"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:param</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token.name"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:param</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span>"<span style="color: black">${sessionScope['struts.token'] }</span>"<span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">s:url</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:a</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">href</span><span style="color: black">=</span><em><span style="color: #2a00ff">"%{toUrl}"</span></em><span style="color: teal">></span></span><span style="font-size: 10pt; color: black; font-family: 宋体">提交</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:a</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><span style="font-size: 10pt; font-family: 宋体">以上˜q™ä¸‰ä¸ªæ–¹æ³•在无线互联¾|‘开发过½E‹ä¸­éƒ½æ˜¯å¾ˆå®žç”¨çš„åQŒå…·ä½“的要看个äh爱好åQŒå½“ç„Óž¼Œå¦‚果你做</span><span style="font-size: 10pt; font-family: 'Courier New'">WEB</span><span style="font-size: 10pt; font-family: 宋体">开发,你也可以直接ç”?/span><span style="font-size: 10pt; font-family: 'Courier New'"><s:form /></span></p> <img src ="http://www.aygfsteel.com/jzone/aggbug/322215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-29 16:14 <a href="http://www.aygfsteel.com/jzone/articles/322215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回顾Struts2 工作‹¹?/title><link>http://www.aygfsteel.com/jzone/articles/322181.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Fri, 28 May 2010 15:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/322181.html</guid><description><![CDATA[Struts2 处理‹¹ç¨‹æ¦‚要åQ?br /> 一个请求在Struts2æ¡†æž¶ä¸­çš„å¤„ç†å¤§æ¦‚åˆ†äØ“ä»¥ä¸‹å‡ ä¸ªæ­¥éª¤<br /> 1 客户端初始化一个指向Servlet容器åQˆä¾‹å¦‚TomcatåQ‰çš„è¯äh±‚<br /> 2 ˜q™ä¸ªè¯äh±‚¾lè¿‡ä¸€¾pÕdˆ—的过滤器åQˆFilteråQ‰ï¼ˆ˜q™äº›˜q‡æ×o器中有一个叫做ActionContextCleanUp的可选过滤器åQŒè¿™ä¸ªè¿‡æ»¤å™¨å¯¹äºŽStruts2和其他框架的集成很有帮助åQŒä¾‹å¦‚:SiteMesh PluginåQ?br /> 3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action<br /> 4 如果ActionMapper军_®šéœ€è¦è°ƒç”¨æŸä¸ªActionåQŒFilterDispatcher把请求的处理交给ActionProxy<br /> 5 ActionProxy通过Configuration Manager询问框架的配¾|®æ–‡ä»Óž¼Œæ‰‘Öˆ°éœ€è¦è°ƒç”¨çš„Action¾c?br /> 6 ActionProxy创徏一个ActionInvocation的实例ã€?br /> 7 ActionInvocation实例使用命名模式来调用,在调用Action的过½E‹å‰åŽï¼Œæ¶‰åŠåˆ°ç›¸å…Ïx‹¦æˆªå™¨åQˆIntercepteråQ‰çš„调用ã€?br /> 8一旦Action执行完毕åQŒActionInvocationè´Ÿè´£æ ÒŽ®struts.xml中的配置扑ֈ°å¯¹åº”的返回结果。返回结果通常是(但不æ€ÀL˜¯åQŒä¹Ÿå¯èƒ½æ˜¯å¦å¤–的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过½E‹ä¸­å¯ä»¥ä½¿ç”¨Struts2框架中ç‘ô承的标签。在˜q™ä¸ª˜q‡ç¨‹ä¸­éœ€è¦æ¶‰åŠåˆ°ActionMapperåQŒåœ¨ä¸Šè¿°˜q‡ç¨‹ä¸­æ‰€æœ‰çš„对象åQˆActionåQŒResultsåQŒInterceptorsåQŒç­‰åQ‰éƒ½æ˜¯é€šè¿‡ObjectFactory来创建的ã€?br /> <br /> ˜q‡æ×o器介¾lï¼ˆFilteråQ?br /> FilterDispatcheråQˆæ³¨åQšæˆ‘æ‰€ä½¿ç”¨çš?.1.8版本中过滤器也升¾U§åˆ°äº†StrutsPrepareAndExecuteFilteråQ?br /> org.apache.struts2.dispatcher.FilterDispatcher的四个功能(必须åQ?br /> struts2.0的主要FilteråQŒè´Ÿè´£å››ä¸ªæ–¹é¢çš„功能。具体:<br /> åQ?åQ‰æ‰§è¡ŒActions<br /> ˜q‡æ×o器通过ActionMapper对象åQŒæ¥åˆ¤æ–­æ˜¯å¦åº”该被映ž®„到Action.如果mapper对象指示他应该被映射åQŒè¿‡æ»¤é“¾ž®†ä¼šè¢«ç»ˆæ­¢ï¼Œç„¶åŽAction被调用。这一炚wžå¸”R‡è¦ï¼Œå¦‚果同时使用SiteMesh filteråQŒåˆ™SiteMesh filter应该攑ֈ°è¯¥è¿‡æ»¤å™¨å‰ï¼Œå¦åˆ™Action的输出将不会被装饰ã€?br /> åQ?åQ‰æ¸…除ActionContext<br /> ˜q‡æ×oå™¨äØ“äº†ç¡®ä¿å†…å­˜æº¢å‡ºï¼Œä¼šè‡ªåŠ¨çš„æ¸…é™¤ActionContext。这可能会存在一些问题,在和其它的框枉™›†æˆæ—¶åQŒä¾‹å¦‚SiteMesh。ActionContextCleanUp提供了怎么处理˜q™äº›é—®é¢˜çš„一些信息ã€?br /> åQ?åQ‰ç»´æŠ¤é™æ€å†…å®?br /> ˜q‡æ×o器也会维护在Struts2中ä‹É用的一些公å…Þqš„静态的内容åQŒä¾‹å¦‚JavaScriptæ–‡äšgåQŒCSSæ–‡äšg½{‰ã€‚搜ç´?struts/*范围内的è¯äh±‚åQŒç„¶åŽå°†/struts/后面的值映ž®„到一些struts的公共包中,也可以在你的¾c»èµ\径中搜烦ã€?br /> åQ?åQ‰æ¸…除ActionContext中的内容ã€?br /> Finally{ActionContextCleanUp.cleanUp(req);} <br /> <br /> ActionContextCleanUp<br /> org.apache.struts2.dispatcher.ActionContextCleanUpåQˆå¯é€‰ï¼‰<br /> 可选过滤器åQŒè¿™ä¸ªè¿‡æ»¤å™¨å¯¹äºŽStruts2和其他框架的集成很有帮助åQŒä¾‹å¦‚:SiteMesh Plugin。该˜q‡æ×o器用来与FilterDispatcher协同工作以便于集成SiteMesh. 通常, 排列˜q‡æ×oå™¨åÆˆä¿è¯SiteMesh排在½W¬ä¸€ä½? 而让FilterDispatcher排在½W¬äºŒä½çœ‹èµäh¥æ˜¯æœ€ä½Ïx–¹æ¡? ç„¶è€? 你可能希望在SiteMesh修饰器中使用WebWork的特æ€? 包括value stack, 但由于FilterDispatcherž®†æ¸…除ActionContext, 因此修饰器就讉K—®ä¸åˆ°æƒŒ™¦çš„æ•°æ®äº†. <br /> <br /> WEB.XML配置™åºåº<br /> 在WebWork的架构中, 标准的过滤器é“?filter-chain)一般以 ActionContextCleanUp å¼€å§? 后面跟着其他需要的˜q‡æ×oå™? 最å? ç”?FilterDispatcher 处理è¯äh±‚, 通常是将è¯äh±‚传递给ActionMapper. ActionContextCleanUp 的首要用途是为集成SiteMesh服务çš? 他会通知FilterDispatcher在正¼‹®çš„æ—‰™—´æ¸…除è¯äh±‚. 否则, ActionContextž®†åœ¨SiteMesh修饰器访问数据之前被清除.<br /> 在不使用SiteMesh的时å€?ä¸ÞZº†ä½¿ç”¨WebWork,我们只需要在web.xml配置FilterDispatcher一个过滤器卛_¯,阅读一下FilterDispatcherçš„JavaDoc和源ç ?我们可以看到它调用了:<br /> finally {   ActionContextCleanUp.cleanUp(req); } <br /> 而且JavaDoc中也提到看ActionContextCleanUp的文æ¡?那我们就åŽÈœ‹å?我没看所ä»?..)<br /> 在ActionContextCleanUpä¸?有这æ ïLš„代码:<br /> req.setAttribute(CLEANUP_PRESENT, Boolean.TRUE); <br /> 如果FilterDispatcher‹‚€‹¹‹åˆ°˜q™ä¸ªå±žæ€?ž®×ƒ¸ä¼šæ¸…除ActionContext中的内容äº?而由ActionContextCleanUp后箋的代码来清除,保证了一¾pÕdˆ—çš„Filter讉K—®æ­£ç¡®çš„ActionContext.文档中提åˆ?如果用到SiteMeshçš„Filter或者其他类似Filter,那么讄¡½®™åºåºæ˜?<br /> 1 ActionContextCleanUp filter <br /> 2 SiteMesh filter <br /> 3 FilterDispatcher <br /> <br /> Struts 2 中ä‹É用的模式--CHAIN OF RESPONSIBILITY(职责é“?<br />   适用性:<br />   1.有多个对象可以处理统一è¯äh±‚åQŒä½†æ˜¯ï¼Œé‚£ä¸ªå¯¹è±¡å¤„理要到˜qè¡Œæ—¶åˆ»å†›_®šã€?br />   2.希望在不明确接收者的情况下,向多个对象中的一个提交一个请求ã€?br />   3.可处理一个请求的对象集合应该被动态指定ã€?br />   思考:<br />   既然要向未知的接收者提交请求,那么ž®±éœ€è¦ç»Ÿä¸€çš„æäº¤ç•Œé¢ï¼Œä¹Ÿå°±æ˜¯è¯´åQŒæ‰€æœ‰æŽ¥æ”¶è€…应该实çŽîC¸€ä¸ªå…¬å…±æŽ¥å£ï¼Œæ¥æŽ¥æ”¶è¯·æ±‚,当然Delegate可以改变˜q™ä¸€çŠ¶å†µã€‚ä¸€ä¸ªå…¸åž‹çš„åº”ç”¨çŽ¯å¢ƒž®±æ˜¯GUI¾pȝ»Ÿä¸­çš„事äšg处理æ–ÒŽ³•。例如,我们可以定义一个OnClick的界面,然后OnClick可以是实际接收对象的一个方法代ç?<br />   OnClick åQ?someObj.doClick;<br />   最重要的是åQŒOnClickå’ŒsomeObj.doClick之间的关¾pÀL˜¯å¯ä»¥åŠ¨æ€æ”¹å˜çš„ã€‚å¦å¤–ï¼Œ˜q™ä¸ªdoClick可以向一个对象集合分发该事äšgåQŒè¯¥é›†åˆä¹Ÿæ˜¯å¯ä»¥åŠ¨æ€å˜åŒ–çš„åQŒè¿™æ—¶å®ƒçš„é™æ€ç»“æž„å’Œè§‚å¯Ÿå‘˜æ¨¡å¼å¾ˆç›æ€¼¼åQŒä½†æ˜¯èŒè´£é“¾æ¨¡å¼òq¶ä¸éœ€è¦å°†äº‹äšg递交¾l™æ¯ä¸€ä¸ªæŽ¥æ”¶è€…。观察员模式兛_¿ƒçš„æ˜¯å¦‚何观察到模型的变化åQŒèŒè´£é“¾æ¨¡å¼å…›_¿ƒçš„æ˜¯å¦‚何递交å‡ÞZº‹ä»¶ã€‚这两者还都需要关心如何接收到相应的事ä»Óž¼Œž®½ç®¡æŽ¥æ”¶çš„è¡Œä¸ºåÆˆä¸ä¸€æ —÷€?br />   职责链模式需要关心每一个事仉™ƒ½åº”该被合适的一个或多个接收者处理(HOOK模式åQ‰ã€‚例如,在一个消息分‹z„¡š„˜q‡ç¨‹ä¸­ï¼Œæˆ‘们需要考虑如何增减消息处理˜q‡ç¨‹åQŒä»¥å¤„理相关的消息,通常˜q™äº›å¤„理˜q‡ç¨‹éƒ½æ˜¯å„不相同的行为,òq¶ä¸”反过来可能对发送者有影响。观察员模式一般而言åQŒåº”该是无扰的ã€?br />   接收者常常是通过Composite模式来组¾l‡çš„ã€?br />   COMMAND(命ä×o)<br />   适用性:<br />   1.Command模式是回调函数的一个面向对象的替代品ã€?br />   2.Command对象可以有和初始è¯äh±‚无关的生存期<br />   3.支持取消操作<br />   4.支持修改日志<br />   5.用构建在原语操作上的高层操作构造一个系¾lŸã€?br />   思考:<br />   COMMAND模式æ€ÀL˜¯ä¼šå…³è”到一个触发者。通常åQŒå®ƒæä¾›çš„æ˜¯ä¸€ä¸ªéžå¸¸ç®€å•的接口。COMMAND对象一般而言是一个相寚w«˜¾U§çš„对象åQŒä»–通常可以完成一个相对完整的概念操作åQŒå¥½åƒæ˜¯å®Œæˆäº†ä¸€ä¸ªäº‹åŠ¡ä¸€æ —÷€‚因为COMMAND比较高çñ”åQŒé‚£ä¹ˆå…¶å†…部可以安排一些相对底层的支持åQŒä¾‹å¦‚日志活动。很多COMMAND对象也是同时提供撤销操作ã€?br />   如果COMMAND应用于事务系¾lŸï¼Œòq¶ä¸”åQŒä¸€ä¸ªCOMMAND对象对应于一个事务的话,要小心撤销语意。一般而言åQŒä¸åº”该撤销一个事务系¾lŸä¸­å·²ç»å®Œæˆçš„事务。而是通过另一个反向的事务来冲æŠüc€‚例如一个帐务系¾lŸï¼Œå¯¹äºŽé”™è¯¯çš„记帐流水事务,在向¾pȝ»Ÿæäº¤ä»¥å‰åQŒå¯ä»¥ç®€å•撤销åQˆè¿™å¯ä»¥åœ¨Command对象的撤销操作中实玎ͼŒä¹Ÿå¯ä»¥ç®€å•放弃)。对于提交以后,则应该提供一个反向的撤销‹¹æ°´äº‹åŠ¡åQˆä¸å»ø™®®åœ¨æ’¤é”€æ“ä½œä¸­å®žçŽŽÍ¼‰åQŒè¿™æ ïL³»¾lŸæœ€¾lˆè®°å½•两个事务,òq¶ä¸”后一个事务可以冲销前一个事务。进一步,如果发现历史帐务‹¹æ°´è®°å½•有错åQŒä¸€èˆ¬çš„财务逻辑是需要用¾U¢å­—冲正åQŒå°±æ›´ä¸åº”该采用撤销的手ŒDµäº†ã€?br />   职责铄¡š„接收者,可以实现为COMMAND对象åQŒå½“ç„Óž¼Œ˜q™åƈ不必要ã€? <img src ="http://www.aygfsteel.com/jzone/aggbug/322181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-28 23:33 <a href="http://www.aygfsteel.com/jzone/articles/322181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA脚本取得struts2 OgnlValueStack中的å€?/title><link>http://www.aygfsteel.com/jzone/articles/321637.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 22 May 2010 15:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/321637.html</guid><description><![CDATA[<p>1 利用脚本获取传入å€û|¼š </p> <p>在struts2中action传递给jsp中的数据是保存在OgnlValueStack中的åQŒæ‰€ä»¥åœ¨jsp™åµé¢ä¸­å¦‚果想利用脚本而不是sturts标签获取传入值的话,ž®½é‡ä½¿ç”¨OgnlValueStackçš„å€ÆDŽ·å¾—ï¼Œä¾‹å¦‚åQ?</p> <p><%...OgnlValueStack stack = (OgnlValueStack) request.getAttribute("struts.valueStack"); </p> <p>Article article = (Article)(stack.findValue("article"));%> </p> <p>2 sturts2标签自动转换Html标签 </p> <p>在ä‹É用struts2标签<s:property value="">来显½CÞZ¼ é€’值的时候,会将字符串中的html标签转换åQŒæ‰€ä»¥å¯ä»¥åˆ©ç”¨java脚本直接获取传入å€û|¼Œä½¿ç”¨æ–¹å¼è§ç¬¬ä¸€æ?br /> </p> <img src ="http://www.aygfsteel.com/jzone/aggbug/321637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-22 23:56 <a href="http://www.aygfsteel.com/jzone/articles/321637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSH2 主要知识ç‚?SSH2çš„jar包详è§?/title><link>http://www.aygfsteel.com/jzone/articles/321578.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Fri, 21 May 2010 14:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/321578.html</guid><description><![CDATA[<p>以下为我下蝲的传智播客视频里SSH视频的目录,感觉æ€È»“的挺好,SSH2学习中一直由˜q™å¥—视频伴随着æˆ?br /> </p> <p>SSH2要点åQ?br /> Struts2.1.8 要点åQ?br /> 01 struts2及struts2开发环境的搭徏<br /> 02 ½W¬ä¸€ä¸ªstruts2应用开å?br /> 03 è§£å†³struts2配置文äšg无提½Cºé—®é¢?br /> 04 Action名称的搜索顺åº?br /> 05 Action配置的各™åšw»˜è®¤å€?br /> 06 result配置的各¿Uè§†å›¾è{发类åž?br /> 07 ä¸ºAction属性注入å€?br /> 08 æŒ‡å®šStruts2处理的请求后¾~€ã€å¸¸é‡å®šä¹‰ã€å¸¸ç”¨å¸¸é‡?br /> 09 Struts2的处理流½E‹ä¸ŽAction的管理方å¼?br /> 10 ä¸ºåº”用指定多个配¾|®æ–‡ä»?br /> 11 åŠ¨æ€æ–¹æ³•è°ƒç”¨å’Œä½¿ç”¨é€šé…½W¦å®šä¹‰action<br /> 12 è¯äh±‚参数接收与采用复合类型接收请求参数及解决中文参数ä¹Þq é—®é¢˜<br /> 13 è‡ªå®šä¹‰ç±»åž‹è{换器<br /> 14 å…¨å±€¾cÕdž‹è½¬æ¢å™?br /> 15 è®‰K—®æˆ–添加request、session、application属æ€?br /> 16 æ–‡äšg上传<br /> 17 å¤šæ–‡ä»¶ä¸Šä¼?br /> 18 è‡ªå®šä¹‰æ‹¦æˆªå™¨<br /> 19 å¯¹Action中所有方法进行输入校éª?br /> 20 å¯¹action指定æ–ÒŽ³•˜q›è¡Œæ ¡éªŒ<br /> 21 è¾“入校验的流½E?br /> 22 åŸÞZºŽXML配置方式实现对action的所有方法进行校éª?br /> 23 åŸÞZºŽXML配置方式实现å¯ÒŽŒ‡å®šactionæ–ÒŽ³•校验与基于XML配置校验的一些特ç‚?br /> 24 é…ç½®å›½é™…化全局资源文äšg、输出国际化信息<br /> 25 è¾“出带有占位½W¦çš„国际化信æ?br /> 26 é…ç½®åŒ…范围国际化资源文äšg<br /> 27 é…ç½®Action范围国际化资源文ä»?br /> 28 ognl表达å¼?br /> 29 struts2常用标签解说<br /> 30 é˜²æ­¢è¡¨å•重复提交</p> <p>Spring2.5 要点åQ?br /> 01 å…¨é¢é˜é‡ŠSpring及其各项功能<br /> 02 æ­å¾ä¸Žæµ‹è¯•Spring的开发环å¢?nbsp;<br /> 03 ¾~–码剖析Spring½Ž¡ç†Bean的原ç?nbsp;<br /> 04 Spring的三¿Uå®žä¾‹åŒ–Bean的方å¼?nbsp;<br /> 05 é…ç½®Spring½Ž¡ç†çš„bean的作用域 <br /> 06 Spring½Ž¡ç†çš„Bean的生命周æœ?nbsp;<br /> 07 ¾~–码剖析Spring依赖注入的原ç?nbsp;<br /> 08 ¾~–码剖析Spring装配基本属性的原理 <br /> 09 Spring如何装配各种集合¾cÕdž‹çš„属æ€?nbsp;<br /> 10 ä½¿ç”¨æž„造器装配属æ€?nbsp;<br /> 11 ç”¨@Resource注解完成属性装é…?nbsp;<br /> 12 ¾~–码剖析@Resource注解的实现原ç?nbsp;<br /> 13 @Autowire注解与自动装é…?nbsp;<br /> 14 è®©Spring自动扫描和管理Bean <br /> 15 ä½¿ç”¨JDK中的Proxy技术实现AOP功能 <br /> 16 ä½¿ç”¨CGLIB实现AOP功能与AOP概念解释 <br /> 17 ä½¿ç”¨Spring的注解方式实现AOP入门 <br /> 18 ä½¿ç”¨Spring的注解方式实现AOP的细èŠ?nbsp;<br /> 19 ä½¿ç”¨Spring配置文äšg实现AOP <br /> 20 aspectj的切入点语法定义¾l†èŠ‚ <br /> 21 æ­å¾å’Œé…¾|®Spring与jdbc整合的环å¢?nbsp;<br /> 22 Spring集成的jdbc¾~–码和事务管ç?nbsp;<br /> 23 ä½¿ç”¨Spring注解方式½Ž¡ç†äº‹åŠ¡ä¸Žä¼ æ’­è¡Œä¸ø™¯¦è§?nbsp;<br /> 24 ä½¿ç”¨Spring配置文äšg实现事务½Ž¡ç† <br /> 25 æ­å¾å’Œé…¾|®Spring与Hibernate整合的环å¢?nbsp;<br /> 26 Spring集成的Hibernate¾~–码与测è¯?nbsp;<br /> 27 Struts与Spring集成æ–ÒŽ¡ˆ1(Struts集成Spring) <br /> 28 Struts与Spring集成æ–ÒŽ¡ˆ2(Spring集成Struts) <br /> 29 ä¸ºSpring集成的Hibernate配置二çñ”¾~“å­˜ <br /> 30 Spring提供的CharacterEncodingå’ŒOpenSessionInView功能 <br /> 31 ä½¿ç”¨Spring集成JPA <br /> 32 Struts+Spring+JPA集成 <br /> 33 ä½¿ç”¨Spring集成Struts2 </p> <p>Hibernate3.3要点åQ?br /> 01 hibernate介绍与动手入门体éª?br /> 02 hibernate入门案例的细节分æž?br /> 03 hibernate入门案例的代码优åŒ?br /> 04 Session接口及get|load|persistæ–ÒŽ³•<br /> 05 å®žä½“对象的三¿UçŠ¶æ€ä¸ŽsaveOrUpdateæ–ÒŽ³•<br /> 06 å®Œå–„HibernateUtil¾cÕdŠhql查询入门<br /> 07 å®žä½“¾cÀLˆ–属性名与数据库关键字冲½Hé—®é¢?br /> 08 hql的命名参æ•îC¸ŽQuery接口的分™å‰|Ÿ¥è¯?br /> 09 Criteria查询方式<br /> 10 ä½¿ç”¨Hibernate完成CRUD实验的步骤说æ˜?br /> 11 å®ŒæˆCRUD实验òq¶å›ž™å‘Ö’Œè¡¥å……¾l†èŠ‚çŸ¥è¯†åQˆä¸ŠåQ?br /> 12 å®ŒæˆCRUD实验òq¶å›ž™å‘Ö’Œè¡¥å……¾l†èŠ‚çŸ¥è¯†åQˆä¸‹åQ?br /> 13 æ€È»“分析½W¬ä¸€å¤©çš„讲解内容<br /> 14 å¤šå¯¹ä¸€å…Œ™”关系的映ž®„与原理分析<br /> 15 å¤šå¯¹ä¸€å…Œ™”关系的检索与原理分析<br /> 16 ä¿å­˜å¤šå¯¹ä¸€å…Œ™”关系的更˜q›ä¸€æ­¥åˆ†æž?br /> 17 ä¸€å¯¹å¤šå…Œ™”关系的映ž®„与原理分析<br /> 18 ä¸€å¯¹ä¸€ä¸»é”®å…Œ™”关系的映ž®„与原理分析<br /> 19 ä¸€å¯¹ä¸€ä¸»é”®å…Œ™”关系的检ç´?br /> 20 ä¸€å¯¹ä¸€å¤–键兌™”关系的映ž®„与原理分析<br /> 21 å¤šå¯¹å¤šå…³è”å…³¾pÈš„æ˜ å°„与原理分æž?br /> 22 å¤šå¯¹å¤šå…³è”å…³¾pÈš„‹‚€ç´?br /> 23 ¾l„äšgå…Œ™”关系的映ž®„与原理分析<br /> 24 å…Œ™”关系的æ€È»“<br /> 25 Hibernate中ä‹É用的集合¾cÕdž‹<br /> 26 å…Œ™”关系的çñ”联操ä½?br /> 27 inverse属性的作用与原理分æž?br /> 28 åˆ†æžæœ‰åºé›†åˆä¸Žå¤šå¯¹å¤šä¸­çš„inverse属æ€?br /> 29 ¾l§æ‰¿å…³ç³»_整个¾l§æ‰¿æ ‘映ž®„到一张表<br /> 30 ¾l§æ‰¿å…³ç³»_每个¾cÀL˜ ž®„到一张表<br /> 31 ¾l§æ‰¿å…³ç³»_鉴别器与内连接相¾l“合<br /> 32 ¾l§æ‰¿å…³ç³»_每个具体¾cÀL˜ ž®„一张独立表<br /> 33 loadæ–ÒŽ³•的懒加蝲及原理分æž?br /> 34 ä¸€å¯¹ä¸€çš„æ‡’加蝲分析<br /> 35 ä¸€å¯¹å¤šå’Œå¤šå¯¹å¤šçš„æ‡’加蝲分析<br /> 36 å¤šå¯¹ä¸€ä¸Žä¸€å¯¹ä¸€çš„æ‡’加蝲原理分析<br /> 37 æ‡’加载的一些扩充细èŠ?br /> 38 ¾~“存的原理与模拟分析<br /> 39 hibernate的内部缓存分æž?br /> 40 hibernate的二¾U§ç¼“存配¾|®ä¸Žåˆ†æž<br /> 41 hibernate二çñ”¾~“存的扩充细èŠ?br /> 42 åˆ†å¸ƒå¼ç¼“存的分析与研è®?br /> 43 äº‹åŠ¡ä¸Žäº‹åŠ¡è¾¹ç•Œçš„ç›¸å…³çŸ¥è¯†<br /> 44 OpenSessionInView模式的代码分æž?br /> 45 OpenSessionInView的时序图与缺点分æž?br /> 46 äº‹åŠ¡ä¸­çš„æ‚²è§‚é”ä¸Žä¹è§‚é”?br /> 47 ä¸²è®²hibernate配置文äšg中的配置™å?br /> 48 ä¸²è®²hibernate映射文äšg中的配置™å?br /> 49 Hibernate映射¾cÕdž‹<br /> 50 Session与SessionFactory的多¾U¿ç¨‹é—®é¢˜<br /> 51 Session的内部缓存管理与扚w‡æ›´æ–°<br /> 52 Hql与Criteria查询的补充知è¯?br /> 53 iterate查询与N+1此查询问é¢?br /> 54 Hibernate的拦截器与监听器<br /> 55 æœ¬åœ°sql查询与命名查è¯?br /> 56 Hiberante的最佛_®žè·?br /> <br /> jar作用的详解:<br /> </p> <p>spring.jar 是包含有完整发布模块的单个jar 包。但是不包括mock.jar, aspects.jar, spring- </p> <p>portlet.jar, and spring-hibernate2.jarã€?</p> <p>spring-src.zipž®±æ˜¯æ‰€æœ‰çš„æºä»£ç åŽ‹¾~©åŒ…ã€?</p> <p>除了spring.jar æ–‡äšgåQŒSpring ˜q˜åŒ…括有其它21个独立的jar 包,各自包含着对应的Spring¾l„äšgåQŒç”¨æˆ·å¯ä»¥æ ¹æ®è‡ªå·Þqš„需要来选择¾l„合自己的jar 包,而不必引入整个spring.jar 的所有类文äšgã€?</p> <p>spring-core.jar <br /> ˜q™ä¸ªjar æ–‡äšg包含Spring 框架基本的核心工å…ïL±»ã€‚Spring 其它¾l„äšg要都要ä‹É用到˜q™ä¸ªåŒ…里的类åQŒæ˜¯å…?/p> <p>它组件的基本核心åQŒå½“然你也可以在自己的应用系¾lŸä¸­ä½¿ç”¨˜q™äº›å·¥å…·¾c…R€‚外部依赖Commons LoggingåQ?(Log4J)ã€?</p> <p>spring-beans.jar <br /> ˜q™ä¸ªjar æ–‡äšg是所有应用都要用到的åQŒå®ƒåŒ…含讉K—®é…ç½®æ–‡äšg、创建和½Ž¡ç†bean 以及˜q›è¡ŒInversion of Control / Dependency InjectionåQˆIoC/DIåQ‰æ“ä½œç›¸å…³çš„æ‰€æœ‰ç±»ã€‚如果应用只需基本的IoC/DI 支持åQŒå¼•å…¥spring-core.jar 及spring-beans.jar æ–‡äšgž®±å¯ä»¥äº†ã€?<br /> 外部依赖spring-coreåQ?CGLIB)ã€?</p> <p>spring-aop.jar <br /> ˜q™ä¸ªjar æ–‡äšg包含在应用中使用Spring çš„AOP ç‰ÒŽ€§æ—¶æ‰€éœ€çš„类和源码çñ”元数据支持。ä‹É用基于AOP çš„Springç‰ÒŽ€§ï¼Œå¦‚声明型事务½Ž¡ç†åQˆDeclarative Transaction ManagementåQ‰ï¼Œä¹Ÿè¦åœ¨åº”用里包含˜q™ä¸ªjar包ã€?<br /> 外部依赖spring-coreåQ?(spring-beansåQŒAOP AllianceåQ?CGLIBåQŒCommons Attributes)ã€?</p> <p>spring-context.jar <br /> ˜q™ä¸ªjar æ–‡äšg为Spring 核心提供了大量扩展。可以找åˆîC‹É用Spring ApplicationContextç‰ÒŽ€§æ—¶æ‰€éœ€çš„全部类åQŒJDNI 所需的全部类åQŒinstrumentation¾l„äšg以及校验Validation æ–šw¢çš„相关类,外部依赖spring-beans, (spring-aop)ã€?</p> <p>spring-dao.jar <br /> ˜q™ä¸ªjar æ–‡äšg包含Spring DAO、Spring Transaction ˜q›è¡Œæ•°æ®è®‰K—®çš„æ‰€æœ‰ç±»ã€‚äØ“äº†ä‹É用声明型事务支持åQŒè¿˜éœ€åœ¨è‡ªå·Þqš„应用里包含spring-aop.jar。外部依赖spring-coreåQ?spring-aopåQ?spring-contextåQ?JTA API)ã€?</p> <p>spring-jdbc.jar <br /> ˜q™ä¸ªjar æ–‡äšg包含对Spring 对JDBC 数据讉K—®˜q›è¡Œž®è£…的所有类。外部依赖spring-beansåQŒspring-daoã€?</p> <p>spring-support.jar <br /> ˜q™ä¸ªjar æ–‡äšg包含支持UI模版åQˆVelocityåQŒFreeMarkeråQŒJasperReportsåQ‰ï¼Œé‚®äšg服务åQŒè„šæœ¬æœåŠ?JRuby)åQŒç¼“å­˜CacheåQˆEHCacheåQ‰ï¼Œä»ÕdŠ¡è®¡åˆ’SchedulingåQˆuartzåQ‰æ–¹é¢çš„¾c…R€‚外部依赖spring-context, (spring-jdbc, Velocity, FreeMarker, JasperReports, BSH, Groovy, JRuby, Quartz, EHCache) </p> <p>spring-web.jar <br /> ˜q™ä¸ªjar æ–‡äšg包含Web 应用开发时åQŒç”¨åˆ°Spring 框架时所需的核心类åQŒåŒ…括自动蝲入Web Application Context ç‰ÒŽ€§çš„¾c…R€Struts 与JSF 集成¾c…R€æ–‡ä»¶ä¸Šä¼ çš„æ”¯æŒ¾c…R€Filter ¾cÕd’Œå¤§é‡å·¥å…·è¾…助¾c…R€‚外部依赖spring-context, Servlet API, (JSP API, JSTL, Commons FileUpload, COS)ã€?</p> <p>spring-webmvc.jar <br /> ˜q™ä¸ªjar æ–‡äšg包含Spring MVC 框架相关的所有类。包括框架的ServletsåQŒWeb MVC框架åQŒæŽ§åˆ¶å™¨å’Œè§†å›¾æ”¯æŒã€‚当ç„Óž¼Œå¦‚果你的应用使用了独立的MVC 框架åQŒåˆ™æ— éœ€˜q™ä¸ªJAR æ–‡äšg里的ä»ÖM½•¾c…R€‚外部依赖spring-web, (spring-supportåQŒTilesåQŒiTextåQŒPOI)ã€?</p> <p>spring-portlet.jar <br /> spring自己实现的一个类似Spring MVC的框架。包括一个MVC框架和控制器。外部依赖spring-webåQ?Portlet APIåQ?spring-webmvc)ã€?</p> <p>spring-struts.jar <br /> Struts框架支持åQŒå¯ä»¥æ›´æ–¹ä¾¿æ›´å®¹æ˜“的集成Struts框架。外部依赖spring-webåQŒStrutsã€?</p> <p>spring-remoting.jar <br /> ˜q™ä¸ªjar æ–‡äšg包含支持EJB、远½E‹è°ƒç”¨RemotingåQˆRMI、Hessian、Burlap、Http Invoker、JAX-RPCåQ‰æ–¹é¢çš„¾c…R€‚外部依赖spring-aopåQ?(spring-contextåQŒspring-webåQŒHessianåQŒBurlapåQŒJAX-RPCåQŒEJB API)ã€?</p> <p>spring-jmx.jar <br /> ˜q™ä¸ªjar包提供了对JMX 1.0/1.2的支持类。外部依赖spring-beansåQŒspring-aopåQ?JMX APIã€?</p> <p>spring-jms.jar <br /> ˜q™ä¸ªjar包提供了对JMS 1.0.2/1.1的支持类。外部依赖spring-beansåQŒspring-daoåQŒJMS APIã€?</p> <p>spring-jca.jar <br /> 对JCA 1.0的支持。外部依赖spring-beansåQŒspring-daoåQ?JCA APIã€?</p> <p>spring-jdo.jar <br /> 对JDO 1.0/2.0的支持。外部依赖spring-jdbcåQ?JDO APIåQ?(spring-web)ã€?</p> <p>spring-jpa.jar <br /> 对JPA 1.0的支持。外部依赖spring-jdbcåQ?JPA APIåQ?(spring-web)ã€?</p> <p>spring-hibernate2.jar <br /> 对Hibernate 2.1的支持,已经不徏议ä‹É用。外部依赖spring-jdbcåQŒHibernate2åQ?spring-web)ã€?</p> <p>spring-hibernate3.jar <br /> 对Hibernate 3.0/3.1/3.2的支持。外部依赖spring-jdbcåQŒHibernate3åQ?spring-web)ã€?</p> <p>spring-toplink.jar <br /> 对TopLink框架的支持。外部依赖spring-jdbcåQŒTopLinkã€?</p> <p>spring-ibatis.jar <br /> 对iBATIS SQL Maps的支持。外部依赖spring-jdbcåQŒiBATIS SQL Maps。另外的两个包ã€?</p> <p>spring-mock.jar <br /> ˜q™ä¸ªjar æ–‡äšg包含Spring 一整套mock ¾cÀL¥è¾…助应用的测试。Spring ‹¹‹è¯•套äšg使用了其中大量mock ¾c»ï¼Œ˜q™æ ·‹¹‹è¯•ž®±æ›´åŠ ç®€å•ã€‚æ¨¡æ‹ŸHttpServletRequest å’ŒHttpServletResponse ¾cÕdœ¨Web 应用单元‹¹‹è¯•æ˜¯å¾ˆæ–¹ä¾¿çš„ã€‚åÆˆä¸”æä¾›äº†å¯¹JUnit的支持。外部依赖spring-coreã€?</p> <p>spring-aspects.jar <br /> 提供对AspectJ的支持,以便可以方便的将面向斚w¢çš„功能集成进IDE中,比如Eclipse AJDT。外部依赖。WEAVER JARS (dist/weavers)说明ã€?</p> <p>spring-agent.jar <br /> Springçš„InstrumentationSavingAgent (为InstrumentationLoadTimeWeaver)åQŒä¸€ä¸ªè®¾å¤‡ä»£ç†åŒ…åQŒå¯ä»¥å‚考JDK1.5çš„Instrumentation功能获得更多信息。外部依赖none (for use at JVM startup: "-javaagent:spring-agent.jar")ã€?</p> <p>spring-tomcat-weaver.jar <br /> 扩展Tomcatçš„ClassLoaderåQŒä‹É其可以ä‹É用instrumentationåQˆè®¾å¤‡ï¼‰¾c…R€‚外部依赖none (for deployment into Tomcat's "server/lib" directory)。如果需要ä‹É用JSPè¯­è¨€ä½œäØ“Spring's web MVC tags的参敎ͼŒåˆ™éœ€è¦JSP 2.0的支持。或者选择Jakartaçš„JSTL (standard.jar)。如何选择˜q™äº›å‘布包,军_®šé€‰ç”¨å“ªäº›å‘布包其实相当简单。如果你正在构徏Web 应用òq¶å°†å…¨ç¨‹ä½¿ç”¨SpringåQŒé‚£ä¹ˆæœ€å¥½å°±ä½¿ç”¨å•个全部的spring.jar æ–‡äšgåQ›å¦‚果你的应用仅仅用到简单的Inversion of Control / Dependency InjectionåQˆIoC/DIåQ‰å®¹å™¨ï¼Œé‚£ä¹ˆåªéœ€spring-core.jar与spring-beans.jar 卛_¯åQ›å¦‚果你对发布的大小要求很高åQŒé‚£ä¹ˆå°±å¾—精挑细选了åQŒåªå–包含自己所需ç‰ÒŽ€§çš„jar æ–‡äšg了。采用独立的发布包你可以避免包含自己的应用不需要的全部¾c…R€‚当然你可以采用其它的一些工å…äh¥è®¾æ³•令整个应用包变小åQŒèŠ‚çœç©ºé—´çš„é‡ç‚¹åœ¨äºŽå‡†ç¡®åœ°æ‰¾å‡ø™‡ªå·±æ‰€éœ€çš?Spring 依赖¾c»ï¼Œç„¶åŽåˆåƈ所需的类与包ž®±å¯ä»¥äº†ã€‚Eclispe 有个插äšg叫ClassPathHelper 可以帮你找找所依赖的类 </p> <p> </p> <p>Hibernate一共包括了23个jar包,令ähçœÆDб¾~­äؕ。下载HibernateåQŒä¾‹å¦?.0.3½E›_®šç‰ˆæœ¬åQŒè§£åŽ‹ç¾ƒåQŒå¯ä»¥çœ‹åˆ?</p> <p>一个hibernate2.jarå’Œlib目录下有22个jar包: </p> <p>hibernate2.jar: <br /> Hibernate的库åQŒæ²¡æœ‰ä»€ä¹ˆå¯è¯´çš„åQŒå¿…™åÖM‹É用的jaråŒ?</p> <p>cglib-asm.jar: <br /> CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库åQŒå¿…™åÖM‹É用的jaråŒ?</p> <p>dom4j.jar: <br /> dom4j是一个Javaçš„XML APIåQŒç±»ä¼égºŽjdomåQŒç”¨æ¥è¯»å†™XMLæ–‡äšg的。dom4j是一个非帔Ržå¸æ€¼˜¿U€çš„Java XML APIåQŒå…·æœ‰æ€§èƒ½ä¼˜å¼‚、功能强大和极端易用使用的特点,同时它也是一个开放源代码的èÊYä»Óž¼Œå¯ä»¥åœ¨SourceForge上找到它。在IBM developerWorks上面可以扑ֈ°ä¸€½‹‡æ–‡ç« ï¼Œå¯¹ä¸»‹¹çš„Java XML API˜q›è¡Œ 的性能、功能和易用性的评测åQŒdom4j无论在那个方面都是非常出色的。我早在ž®†è¿‘两年之前ž®±å¼€å§‹ä‹É 用dom4jåQŒç›´åˆ°çŽ°åœ¨ã€‚å¦‚ä»Šä½ å¯ä»¥çœ‹åˆ°­‘Šæ¥­‘Šå¤šçš„Java软äšg都在使用dom4j来读写XMLåQŒç‰¹åˆ«å€¼å¾—一提的 是连Sunçš„JAXM也在用dom4j。这是必™åÖM‹É用的jar包,Hibernate用它来读写配¾|®æ–‡ä»¶ã€?</p> <p>odmg.jar: <br /> ODMG是一个ORM的规范,Hibernate实现了ODMG规范åQŒè¿™æ˜¯ä¸€ä¸ªæ ¸å¿ƒçš„库,必须使用的jar包ã€?</p> <p>commons-collections.jaråQ?<br /> Apache Commons包中的一个,包含了一些Apache开发的集合¾c»ï¼ŒåŠŸèƒ½æ¯”java.util.*强大。必™åÖM‹É用的jar包ã€?</p> <p>commons-beanutils.jaråQ?<br /> Apache Commons包中的一个,包含了一些Bean工具¾cȝ±»ã€‚å¿…™åÖM‹É用的jar包ã€?</p> <p>commons-lang.jar: <br /> Apache Commons包中的一个,包含了一些数据类型工å…ïL±»åQŒæ˜¯java.lang.*的扩展。必™åÖM‹É用的jar包ã€?</p> <p>commons-logging.jar: <br /> Apache Commons包中的一个,包含了日志功能,必须使用的jar包。这个包本èín包含了一个Simple LoggeråQŒä½†æ˜¯åŠŸèƒ½å¾ˆå¼±ã€‚åœ¨˜qè¡Œçš„æ—¶å€™å®ƒä¼šå…ˆåœ¨CLASSPATH找log4jåQŒå¦‚果有åQŒå°±ä½¿ç”¨log4jåQŒå¦‚果没有,ž®±æ‰¾JDK1.4带的java.util.loggingåQŒå¦‚果也找不到就用Simple Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾åQŒå½“初Apache极力游说Sun把log4j加入JDK1.4åQŒç„¶è€ŒJDK1.4™å¹ç›®ž®ç»„已经 接近发布JDK1.4产品的时间了åQŒå› æ­¤æ‹’¾läº†Apache的要求,使用自己的java.util.loggingåQŒè¿™ä¸ªåŒ…的功能比log4j差的很远åQŒæ€§èƒ½ä¹Ÿä¸€èˆ¬ã€?后来Apachež®±å¼€å‘出来了commons-logging.jar用来兼容两个logger。因此用commons-logging.jar 写的log½E‹åºåQŒåº•层的Logger是可以切换的åQŒä½ å¯ä»¥é€‰æ‹©log4jåQŒjava.util.logging或者它自带çš?Simple Logger。不˜q‡æˆ‘ä»ç„¶å¼ºçƒˆå»ø™®®ä½¿ç”¨log4jåQŒå› ä¸ºlog4j性能很高åQŒlog输出信息旉™—´å‡ ä¹Ž½{‰äºŽ System.outåQŒè€Œå¤„理一条logòq›_‡åªéœ€è¦?us。你可以在Hibernateçš„src目录下找到Hibernate已经ä¸ÞZ½ å‡†å¤‡å¥½äº†çš„log4j的配¾|®æ–‡ä»Óž¼Œä½ åªéœ€è¦åˆ°Apache ¾|‘ç«™åŽÖM¸‹è½½log4jž®±å¯ä»¥äº†ã€‚commons-logging.jar也是必须的jar包ã€?使用Hibernate必须的jar包就是以上的˜q™å‡ ä¸ªï¼Œå‰©ä¸‹çš„都是可选的ã€?</p> <p>ant.jar: <br /> Ant¾~–译工具的jar包,用来¾~–译Hibernate源代码的。如果你不准备修改和¾~–译Hibernate源代码,那么ž®±æ²¡æœ‰ä»€ä¹ˆç”¨åQŒå¯é€‰çš„jaråŒ?</p> <p>optional.jaråQ?<br /> Ant的一个辅助包ã€?</p> <p>c3p0.jaråQ?<br /> C3PO是一个数据库˜qžæŽ¥æ± ï¼ŒHibernate可以配置ä¸ÞZ‹É用C3PO˜qžæŽ¥æ± ã€‚如果你准备用这个连接池åQŒå°±éœ€è¦è¿™ä¸ªjar包ã€?</p> <p>proxool.jaråQ?<br /> 也是一个连接池åQŒåŒä¸Šã€?</p> <p>commons-pool.jar, commons-dbcp.jar: <br /> DBCP数据库连接池åQŒApacheçš„Jakarta¾l„织开发的åQŒTomcat4的连接池也是DBCP。实际上Hibernate自己也实çŽîCº†ä¸€ä¸ªéžå¸”Ržå¸¸ç®€å•的数据库连接池åQŒåŠ ä¸Šä¸Šé?个,你实际上可以åœ?Hibernate上选择4¿Uä¸åŒçš„æ•°æ®åº“连接池åQŒé€‰æ‹©å“ªä¸€ä¸ªçœ‹ä¸ªäh的偏好,不过DBCP可能更通用一些。另外强调一点,如果在EJB中ä‹É用HibernateåQŒä¸€å®šè¦ç”¨App Server的连接池åQŒä¸è¦ç”¨ä»¥ä¸Š4¿Uè¿žæŽ¥æ± åQŒå¦åˆ™å®¹å™¨ç®¡ç†äº‹åŠ¡ä¸èµ·ä½œç”¨ã€?</p> <p>connector.jar: <br /> JCA 规范åQŒå¦‚果你在App Server上把Hibernate配置为Connector的话åQŒå°±éœ€è¦è¿™ä¸ªjar。不˜q‡å®žé™…上一般App Server肯定会带上这个包åQŒæ‰€ä»¥å®žé™…上是多余的包ã€?</p> <p>jaas.jar: <br /> JAAS是用来进行权限验证的åQŒå·²¾låŒ…含在JDK1.4里面了。所以实际上是多余的包ã€?</p> <p>jcs.jaråQ?<br /> 如果你准备在Hibernate中ä‹É用JCS的话åQŒé‚£ä¹ˆå¿…™åÕdŒ…括它åQŒå¦åˆ™å°±ä¸ç”¨ã€?</p> <p>jdbc2_0-stdext.jar: <br /> JDBC2.0的扩展包åQŒä¸€èˆ¬æ¥è¯´æ•°æ®åº“˜qžæŽ¥æ± ä¼šç”¨ä¸Šå®ƒã€‚不˜q‡App Server都会带上åQŒæ‰€ä»¥ä¹Ÿæ˜¯å¤šä½™çš„ã€?</p> <p>jta.jaråQ?<br /> JTA规范åQŒå½“Hibernate使用JTA的时候需要,不过App Server都会带上åQŒæ‰€ä»¥ä¹Ÿæ˜¯å¤šä½™çš„ã€?/p> <img src ="http://www.aygfsteel.com/jzone/aggbug/321578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-21 22:00 <a href="http://www.aygfsteel.com/jzone/articles/321578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点½W”è®°åQˆå…­åQ?/title><link>http://www.aygfsteel.com/jzone/articles/321315.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Tue, 18 May 2010 17:24:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/321315.html</guid><description><![CDATA[<p><span style="font-family: 宋体">二十三ã€?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">表达å¼?/span><span style="font-family: 'Courier New'">-Object Graphic Navigation Language</span><span style="font-family: 宋体">åQˆå¯¹è±¡å›¾å¯ÆDˆªè¯­è¨€åQ?/span></p> <p><span style="font-family: 宋体">æ˜?/span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: 宋体">框架默认的表辑ּè¯­è¨€</span><span style="font-family: 'Courier New'">â€?/span><span style="font-family: 宋体">其实我们可以不掌æ?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">表达式,</span><span style="font-family: 'Courier New'">JSTL/EL</span><span style="font-family: 宋体">来代æ›?/span></p> <p><span style="font-family: 宋体">相对</span><span style="font-family: 'Courier New'">EL</span><span style="font-family: 宋体">表达式,它提供了òqÏx—¶æˆ‘们需要的一些功能,如:</span></p> <p><span style="font-family: 'Courier New'">1. </span><span style="font-family: 宋体">支持对象æ–ÒŽ³•调用。如</span><span style="font-family: 'Courier New'">xxx.sayHello()</span></p> <p><span style="font-family: 'Courier New'">2. </span><span style="font-family: 宋体">支持¾c»é™æ€æ–¹æ³•è°ƒç”¨å’Œå€ÆD®¿é—®ï¼Œè¡¨è¾¾å¼çš„æ ¼å¼ä¸?/span><span style="font-family: 'Courier New'">@[</span><span style="font-family: 宋体">¾cÕd…¨åï¼ˆåŒ…括包èµ\径)</span><span style="font-family: 'Courier New'">]@[</span><span style="font-family: 宋体">æ–ÒŽ³•å?/span><span style="font-family: 'Courier New'">|</span><span style="font-family: 宋体">值名</span><span style="font-family: 'Courier New'">]</span><span style="font-family: 宋体">åQŒä¾‹å¦‚:</span><span style="font-family: 'Courier New'">@<a href="mailto:java.lang.String@format('foo%25s">java.lang.String@format(‘foo%s</a>’, ‘bar’)</span><span style="font-family: 宋体">或è€?/span></p> <p><span style="font-family: 'Courier New'">@cn.itcast.Constant@APP_NAME</span></p> <p style="margin-left: 18.75pt; text-indent: -18.75pt; tab-stops: list 18.75pt"><span style="font-family: 'Courier New'">1.<span style="font: 7pt 'Times New Roman'">     </span></span><span style="font-family: 宋体">操作¾cÕd¯¹è±?/span></p> <p><span style="font-family: 'Courier New'">ognl</span><span style="font-family: 宋体">有一个上下文</span><span style="font-family: 'Courier New'">(Context)</span><span style="font-family: 宋体">概念åQŒè¯´ç™½äº†ä¸Šä¸‹æ–‡å°±æ˜¯ä¸€ä¸?/span><span style="font-family: 'Courier New'">MAP</span><span style="font-family: 宋体">¾l“æž„åQŒå®ƒå®žçްäº?/span><span style="font-family: 'Courier New'">java.utils.Map</span><span style="font-family: 宋体">接口åQŒåœ¨</span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: 宋体">中上下文</span><span style="font-family: 'Courier New'">(Context)</span><span style="font-family: 宋体">的实çŽîCØ“</span><span style="font-family: 'Courier New'">ActionContext</span><span style="font-family: 宋体">åQŒä¸‹é¢æ˜¯ä¸Šä¸‹æ–‡ï¼ˆ</span><span style="font-family: 'Courier New'">Context</span><span style="font-family: 宋体">åQ‰çš„¾l“æž„½Cºæ„å›?/span></p> <p><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: 宋体">中的</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">å®žçŽ°è€…äØ“</span><span style="font-family: 'Courier New'">AcionContext</span></p> <p><span style="font-family: 宋体">å½?/span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: 宋体">接收一个请求时åQŒä¼š˜q…速创å»?/span><span style="font-family: 'Courier New'">ActionContext</span><span style="font-family: 宋体">åQ?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: 宋体">åQ?/span><span style="font-family: 'Courier New'">action</span><span style="font-family: 宋体">åQŒç„¶åŽæŠŠ</span><span style="font-family: 'Courier New'">action</span><span style="font-family: 宋体">存放˜q?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: 宋体">åQŒæ‰€ä»?/span><span style="font-family: 'Courier New'">action</span><span style="font-family: 宋体">的实例变量可以被</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">讉K—®</span></p> <p><span style="font-family: 宋体">讉K—®ä¸Šä¸‹æ–‡ï¼ˆ</span><span style="font-family: 'Courier New'">Context</span><span style="font-family: 宋体">åQ‰ä¸­çš„对象徐傲ä‹Éç”?/span><span style="font-family: 'Courier New'">#</span><span style="font-family: 宋体">½W¦å·æ ‡æ³¨å‘½å½Iºé—´åQŒå¦‚</span><span style="font-family: 'Courier New'">#application</span><span style="font-family: 宋体">åQ?/span><span style="font-family: 'Courier New'">#session</span></p> <p><span style="font-family: 宋体">另外</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">会设定一个根对象åQ?/span><span style="font-family: 'Courier New'">root</span><span style="font-family: 宋体">对象åQ‰ï¼Œåœ?/span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: 宋体">中根对象ž®±æ˜¯</span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: 宋体">åQˆå€¼æ ˆåQ‰ï¼Œå¦‚果要访问根对象åQˆå³</span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: 宋体">åQ‰ä¸­å¯¹è±¡çš„属性,则可以省ç•?/span><span style="font-family: 'Courier New'">#</span><span style="font-family: 宋体">命名½Iºé—´åQŒç›´æŽ¥è®¿é—®è¯¥å¯¹è±¡çš„属性即可ã€?/span></p> <p><span style="font-family: 宋体">åœ?/span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: 宋体">中,根对è±?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: 宋体">的实çŽîCØ“</span><span style="font-family: 'Courier New'">OgnlValueStack</span><span style="font-family: 宋体">åQŒè¯¥å¯¹è±¡ä¸æ˜¯æˆ‘们惌™±¡çš„只存放单个å€û|¼Œè€Œæ˜¯å­˜æ”¾ä¸€¾l„对象。在</span><span style="font-family: 'Courier New'">OgnlValueStack</span><span style="font-family: 宋体">¾c»é‡Œæœ‰ä¸€ä¸?/span><span style="font-family: 'Courier New'">List</span><span style="font-family: 宋体">¾cÕdž‹çš?/span><span style="font-family: 'Courier New'">root</span><span style="font-family: 宋体">变量ž®±æ˜¯ä½¿ç”¨ä»–存放一¾l„对象ã€?/span></p> <p><span style="font-family: 宋体">åœ?/span><span style="font-family: 'Courier New'">root</span><span style="font-family: 宋体">变量中处于第一位的对象叫栈™å¶å¯¹è±¡ï¼Œé€šå¸¸æˆ‘们åœ?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">表达式里直接写上属性的名称卛_¯è®‰K—®</span><span style="font-family: 'Courier New'">root</span><span style="font-family: 宋体">变量里对象的属性,搜烦™åºåºæ˜¯ä»Žæ ˆé¡¶å¯¹è±¡å¼€å§‹å¯»æ‰¾ï¼Œå¦‚果栈顶对象不存在该属性,ž®×ƒ¼šä»Žç¬¬äºŒä¸ªå¯¹è±¡å¯ÀL‰¾åQŒå¦‚果没有找到就到第三个对象å¯ÀL‰¾åQŒä¾‹Æ¡å¾€ä¸‹è®¿é—®ï¼ŒçŸ¥é“扑ֈ°ä¸ºæ­¢ã€?/span></p> <p><span style="font-family: 宋体">注意åQ?/span><span style="font-family: 'Courier New'">Struts</span><span style="font-family: 宋体">中,</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">表达式是需要配å?/span><span style="font-family: 'Courier New'">Struts</span><span style="font-family: 宋体">标签才能使用åQŒå¦‚</span><span style="font-family: 'Courier New'">:<s:property value=”name”/></span></p> <p><span style="font-family: 宋体">ç”׃ºŽ</span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: 宋体">åQˆå€¼æ ˆåQ‰æ˜¯</span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: 宋体">ä¸?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">的根对象åQŒå¦‚果用户需要访问值栈中的对象åQŒåœ¨</span><span style="font-family: 'Courier New'">JSP</span><span style="font-family: 宋体">™åµé¢å¯ä»¥ç›´æŽ¥é€šè¿‡ä¸‹é¢çš?/span><span style="font-family: 'Courier New'">EL</span><span style="font-family: 宋体">表达式访é—?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: 宋体">åQˆå€¼æ ˆåQ‰ä¸­å¯¹è±¡çš„属性:</span></p> <p><span style="font-family: 'Courier New'">${foo} //</span><span style="font-family: 宋体">获得值栈中某个对象的</span><span style="font-family: 'Courier New'">foo</span><span style="font-family: 宋体">属æ€?/span></p> <p><span style="font-family: 宋体">如果讉K—®å…¶ä»–</span><span style="font-family: 'Courier New'">Context</span><span style="font-family: 宋体">中的对象åQŒç”±äºŽä»–们不是根对象åQŒæ‰€ä»¥åœ¨è®‰K—®æ—Óž¼Œéœ€è¦æ·»åŠ?/span><span style="font-family: 'Courier New'">#</span><span style="font-family: 宋体">前缀</span></p> <p><strong><span style="font-family: 'Courier New'">application</span></strong><strong><span style="font-family: 宋体">对象</span></strong><span style="font-family: 宋体">åQšç”¨äºŽè®¿é—?/span><span style="font-family: 'Courier New'">ServletContext</span><span style="font-family: 宋体">åQŒä¾‹å¦?/span><span style="font-family: 'Courier New'">#application.userName</span><span style="font-family: 宋体">或è€?/span><span style="font-family: 'Courier New'">#application[‘userName’]</span><span style="font-family: 宋体">åQŒç›¸å½“于调用</span><span style="font-family: 'Courier New'">ServletContext</span><span style="font-family: 宋体">çš?/span><span style="font-family: 'Courier New'">getAttribute(“username”)</span></p> <p><strong><span style="font-family: 'Courier New'">session</span></strong><strong><span style="font-family: 宋体">对象</span></strong><span style="font-family: 宋体">åQšç”¨æ¥è®¿é—?/span><span style="font-family: 'Courier New'">HttpSession</span><span style="font-family: 宋体">。例å¦?/span><span style="font-family: 'Courier New'">#session.userName</span><span style="font-family: 宋体">或è€?/span><span style="font-family: 'Courier New'">#session[‘userName’]</span><span style="font-family: 宋体">åQŒç›¸å½“于调用</span><span style="font-family: 'Courier New'">session.getAttribue(“userName”)</span></p> <p><strong><span style="font-family: 'Courier New'">request</span></strong><strong><span style="font-family: 宋体">对象</span></strong><span style="font-family: 宋体">åQšç”¨æ¥è®¿é—?/span><span style="font-family: 'Courier New'">HttpServletRequest</span><span style="font-family: 宋体">属性(</span><span style="font-family: 'Courier New'">attribute</span><span style="font-family: 宋体">åQ‰çš„</span><span style="font-family: 'Courier New'">Map</span><span style="font-family: 宋体">åQŒä¾‹å¦?/span><span style="font-family: 'Courier New'">#request.userName</span><span style="font-family: 宋体">或è€?/span><span style="font-family: 'Courier New'">#request[‘userName’],</span><span style="font-family: 宋体">相当于调ç”?/span><span style="font-family: 'Courier New'">request.getAttribute(“username”)</span></p> <p><strong><span style="font-family: 'Courier New'">parameters</span></strong><strong><span style="font-family: 宋体">对象</span></strong><span style="font-family: 宋体">åQšç”¨äºŽè®¿é—?/span><span style="font-family: 'Courier New'">HTTP</span><span style="font-family: 宋体">的请求参敎ͼŒä¾‹å¦‚</span><span style="font-family: 'Courier New'">#parameters.userName</span><span style="font-family: 宋体">或è€?/span></p> <p><span style="font-family: 'Courier New'">#parameters[‘userName’]</span><span style="font-family: 宋体">åQ?/span></p> <p><span style="font-family: 宋体">相当于调ç”?/span><span style="font-family: 'Courier New'">request.getParameter(“username”)</span></p> <p><strong><span style="font-family: 'Courier New'">attr</span></strong><strong><span style="font-family: 宋体">对象</span></strong><span style="font-family: 宋体">åQšç”¨äºŽæŒ‰</span><span style="font-family: 'Courier New'">page->request->session->application</span><span style="font-family: 宋体">™åºåºè®‰K—®å…¶å±žæ€?/span></p> <p><span style="font-family: 宋体">ä¸ÞZ»€ä¹?/span><span style="font-family: 'Courier New'">EL</span><span style="font-family: 宋体">表达式能够访é—?/span><span style="font-family: 'Courier New'">valueStack</span><span style="font-family: 宋体">中对象的属性?</span></p> <p><span style="font-family: 宋体">因䨓</span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: 宋体">å¯?/span><span style="font-family: 'Courier New'">HttpServletRequest</span><span style="font-family: 宋体">做了˜q›ä¸€æ­¥çš„ž®è£…</span></p> <p><span style="font-family: 宋体">采用</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">åQŒä¸èƒ½è®¿é—®å››å¤§ä½œç”¨åŸŸä¸­çš„变量åQŒåªèƒ½è®¿é—?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: 宋体">中的变量</span></p> <p><span style="font-family: 宋体">采用</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">表达式创å»ÞZ¸€ä¸?/span><span style="font-family: 'Courier New'">List/Map</span><span style="font-family: 宋体">集合对象</span></p> <p><span style="font-family: 宋体">如果需要一个集合元素的时候(例如</span><span style="font-family: 'Courier New'">List</span><span style="font-family: 宋体">对象或è€?/span><span style="font-family: 'Courier New'">Map</span><span style="font-family: 宋体">对象åQ‰ï¼Œå¯ä»¥ä½¿ç”¨</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">中同集合相关的表辑ּã€?/span></p> <p><span style="font-family: 宋体">例如使用如下代码直接生成一ä¸?/span><span style="font-family: 'Courier New'">List</span><span style="font-family: 宋体">对象åQ?/span></p> <p><span style="font-family: 'Courier New'"><s:set name=”list” value=”{‘zhangming’,’xiaoli’,’liming’}”/></span></p> <p><span style="font-family: 'Courier New'"><s:iterator value=”#list”></span></p> <p><span style="font-family: 'Courier New'">    <s:property /><br/></span></p> <p><span style="font-family: 'Courier New'"></s:iterator></span></p> <p><span style="font-family: 'Courier New'">set</span><span style="font-family: 宋体">标签用于ž®†æŸä¸ªå€¼æ”¾å…¥æŒ‡å®šèŒƒå›?/span></p> <p><span style="font-family: 'Courier New'">scope</span><span style="font-family: 宋体">åQšæŒ‡å®šå˜é‡è¢«æ”„¡½®çš„范å›ß_¼Œè¯¥å±žæ€§å¯ä»¥æŽ¥å?/span><span style="font-family: 'Courier New'">application</span><span style="font-family: 宋体">ã€?/span><span style="font-family: 'Courier New'">session</span><span style="font-family: 宋体">ã€?/span><span style="font-family: 'Courier New'">request</span><span style="font-family: 宋体">ã€?/span><span style="font-family: 'Courier New'">page</span><span style="font-family: 宋体">或è€?/span><span style="font-family: 'Courier New'">action</span><span style="font-family: 宋体">。如果没有设¾|®è¯¥å±žæ€§ï¼Œåˆ™é»˜è®¤æ”¾¾|®åœ¨</span><span style="font-family: 'Courier New'">OGNL Context</span><span style="font-family: 宋体">ä¸?/span></p> <p><span style="font-family: 'Courier New'">value</span><span style="font-family: 宋体">åQšèµ‹¾l™å˜é‡çš„å€û|¼Œå¦‚果没有讄¡½®è¯¥å±žæ€§ï¼Œåˆ™å°†</span><span style="font-family: 'Courier New'">valueStack</span><span style="font-family: 宋体">æ ˆé¡¶çš„å€ÆDµ‹¾l™å˜é‡?/span></p> <p><span style="font-family: 宋体">生成一ä¸?/span><span style="font-family: 'Courier New'">Map</span><span style="font-family: 宋体">对象</span></p> <p><span style="font-family: 'Courier New'"><s:set name=”foobar” value=”#{‘foo1’:’bar1’,’foo2’:’bar2’}” /></span></p> <p><span style="font-family: 'Courier New'"><s:iterator value=”#foobar” ></span></p> <p><span style="font-family: 'Courier New'">    <s:property value=”key”>=<s:property value=”value”/></span></p> <p><span style="font-family: 'Courier New'"></s:iterator></span></p> <p><span style="font-family: 宋体">采用</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">表达式判断对象是否存在于集合中:</span></p> <p><span style="font-family: 宋体">对于集合¾cÕdž‹åQ?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">表达式可以ä‹Éç”?/span><span style="font-family: 'Courier New'">in</span><span style="font-family: 宋体">å’?/span><span style="font-family: 'Courier New'">not in</span><span style="font-family: 宋体">两个元素½W¦å·åQŒå…¶ä¸­ï¼Œ</span><span style="font-family: 'Courier New'">in</span><span style="font-family: 宋体">表达式用来判断某个元素是否在指定的集合对象中åQ?/span><span style="font-family: 'Courier New'">not in</span><span style="font-family: 宋体">判断某个元素是否不在指定的集合对象中åQŒå¦‚下所½Cºã€?/span></p> <p><span style="font-family: 'Courier New'">in</span><span style="font-family: 宋体">表达式:</span></p> <p><span style="font-family: 'Courier New'"><s:if test=”’foo’ in {‘foo’,’bar’}></span></p> <p><span style="font-family: 'Courier New'">    zai</span></p> <p><span style="font-family: 'Courier New'"></s:if></span></p> <p><span style="font-family: 'Courier New'"><s:else></span></p> <p><span style="font-family: 'Courier New'">    bu zai</span></p> <p><span style="font-family: 'Courier New'"></s:else></span></p> <p><span style="font-family: 'Courier New'">not in </span><span style="font-family: 宋体">表达式:</span></p> <p><span style="font-family: 'Courier New'"><s:if test”’foo’ not in {‘foo’,’bar’}></span></p> <p><span style="font-family: 'Courier New'">    bu zai</span></p> <p><span style="font-family: 'Courier New'"></s:if></span></p> <p><span style="font-family: 'Courier New'"><s:else></span></p> <p><span style="font-family: 'Courier New'">    zai</span></p> <p><span style="font-family: 'Courier New'"></s:else></span></p> <p><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">表达式的投媄功能</span><span style="font-family: 'Courier New'">---</span><span style="font-family: 宋体">一般不适用åQŒæˆ‘们一般会在业务层把满­‘Ïx¡ä»¶çš„对象归结出来</span></p> <p><span style="font-family: 宋体">除了</span><span style="font-family: 'Courier New'">in</span><span style="font-family: 宋体">å’?/span><span style="font-family: 'Courier New'">not in</span><span style="font-family: 宋体">之外åQ?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: 宋体">˜q˜å…è®æ€‹É用某个规则获得集合对象的子集åQŒåœºç”¨çš„æœ‰ä»¥ä¸?/span><span style="font-family: 'Courier New'">3</span><span style="font-family: 宋体">个相å…Ïx“ä½œç¬¦ã€?/span></p> <p><span style="font-family: 'Courier New'">?:</span><span style="font-family: 宋体">获得所有符合逻辑的元ç´?/span></p> <p><span style="font-family: 'Courier New'">^:</span><span style="font-family: 宋体">获得½W¦åˆé€»è¾‘的第一个元ç´?/span></p> <p><span style="font-family: 'Courier New'">$:</span><span style="font-family: 宋体">获得½W¦åˆé€»è¾‘的最后一个元ç´?/span></p> <p><span style="font-family: 宋体">例如代码åQ?/span></p> <p><span style="font-family: 'Courier New'"><s:iterator value=”books.{?#this.price > 35}”></span></p> <p><span style="font-family: 'Courier New'">    <s:property value=”title”/>-$<s:property value=”price” /><br/></span></p> <p><span style="font-family: 'Courier New'"></s:iterator></span></p> <p><span style="font-family: 宋体">在上面的代码中,直接在集合后紧跟</span><span style="font-family: 'Courier New'">.{}</span><span style="font-family: 宋体">˜qç®—½W¦å–凸™¯¥é›†åˆçš„子集,</span><span style="font-family: 'Courier New'">{}</span><span style="font-family: 宋体">内的表达式用于获取符合条件的元素åQ?/span><span style="font-family: 'Courier New'">this</span><span style="font-family: 宋体">æŒ‡çš„æ˜¯äØ“äº†ä»Žå¤§é›†å?/span><span style="font-family: 'Courier New'">books</span><span style="font-family: 宋体">½{›é€‰æ•°æ®åˆ°ž®é›†åˆï¼Œéœ€è¦å¯¹å¤§é›†å?/span><span style="font-family: 'Courier New'">books</span><span style="font-family: 宋体">˜q›è¡Œ˜q­ä»£åQ?/span><span style="font-family: 'Courier New'">this</span><span style="font-family: 宋体">代表当前˜q­ä»£çš„元素。本例的表达式用于获取集合中ä»äh ¼å¤§äºŽ</span><span style="font-family: 'Courier New'">35</span><span style="font-family: 宋体">的书集合</span></p> <p><span style="font-family: 'Courier New'">books.{?#this.price > 35}</span></p> <p><span style="font-family: 'Courier New'">books.{……}</span><span style="font-family: 宋体">åQ?/span><span style="font-family: 'Courier New'"> </span><span style="font-family: 宋体">要从大集合中åQŒç­›é€‰å‡ºæ»¡èƒö</span><span style="font-family: 'Courier New'">……</span><span style="font-family: 宋体">˜q™ä¸ªæ¡äšg的子集合攑ֈ°</span><span style="font-family: 'Courier New'">value</span><span style="font-family: 宋体">ä¸?/span></p> <p><span style="font-family: 'Courier New'">?</span><span style="font-family: 宋体">åQšè¡¨½Cºç¬¦åˆé€»è¾‘的元ç´?/span></p> <p><span style="font-family: 'Courier New'">#this:</span><span style="font-family: 宋体">˜q­ä»£å¤§é›†åˆçš„当前元素<br /> <br /> <br />   </p> <p><span style="font-family: 宋体">二十四ã€?/span><span style="font-family: 'Courier New'">Struts2 </span><span style="font-family: 宋体">标签使用</span></p> <p><strong><span style="font-family: 'Courier New'">property</span></strong><strong><span style="font-family: 宋体">标签使用</span></strong></p> <p><span style="font-family: 'Courier New'"><s:set name=”name” value=”kk” /></span></p> <p><span style="font-family: 'Courier New'"><s:property value=”#name” /></span></p> <p><span style="font-family: 'Courier New'">default:</span><span style="font-family: 宋体">可选属性,如果需要输出的属性å€égØ“</span><span style="font-family: 'Courier New'">NULL</span><span style="font-family: 宋体">åQŒåˆ™æ˜„¡¤ºè¯¥å±žæ€§æŒ‡å®šçš„å€?/span></p> <p><span style="font-family: 'Courier New'">escape:</span><span style="font-family: 宋体">可选属性,指定是否格式åŒ?/span><span style="font-family: 'Courier New'">HTML</span><span style="font-family: 宋体">代码ã€?/span></p> <p><span style="font-family: 'Courier New'">value:</span><span style="font-family: 宋体">可选属性,指定需要输出的属性å€û|¼Œå¦‚果没有指定该属性,则默认输å‡?/span><span style="font-family: 'Courier New'">valueStack</span><span style="font-family: 宋体">栈顶的å€?/span></p> <p><span style="font-family: 'Courier New'">id:</span><span style="font-family: 宋体">可选属性,指定该元素的标识</span></p> <p><strong><span style="font-family: 'Courier New'">iterator </span></strong><strong><span style="font-family: 宋体">˜q­ä»£æ ‡ç­¾</span></strong></p> <p><span style="font-family: 'Courier New'">iterator</span><span style="font-family: 宋体">标签对于集合˜q›è¡Œ˜q­ä»£åQŒè¿™é‡Œçš„集合包含</span><span style="font-family: 'Courier New'">List</span><span style="font-family: 宋体">ã€?/span><span style="font-family: 'Courier New'">Set</span><span style="font-family: 宋体">和数¾l?/span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:set</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"list"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"{'zhangming','xiaoi','liming'}"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:iterator</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"#list"</span></em> <span style="color: #7f007f">status</span><span style="color: black">=</span><em><span style="color: #2a00ff">"st"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">font</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">color</span><span style="color: black">=</span><span style="color: teal"><</span><span style="color: #3f7f7f">s:if</span> <span style="color: #7f007f">test</span><span style="color: black">=</span><em><span style="color: #2a00ff">"#st.odd"</span></em><span style="color: teal">></span><span style="color: black">red</span><span style="color: teal"></</span><span style="color: #3f7f7f">s:if</span><span style="color: teal">><</span><span style="color: #3f7f7f">s:else</span><span style="color: teal">></span><span style="color: black">blue</span><span style="color: teal"></</span><span style="color: #3f7f7f">s:else</span><span style="color: teal">>></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:property</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: teal">/></</span><span style="color: #3f7f7f">font</span><span style="color: teal">></span><span style="color: black">/</span><span style="color: teal"><</span><span style="color: #3f7f7f">br</span><span style="color: teal">></span></span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:iterator</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><span style="font-family: 'Courier New'">value:</span><span style="font-family: 宋体">可选属性,指定被è„P代的集合åQŒå¦‚果没有设¾|®è¯¥å±žæ€§ï¼Œåˆ™ä‹Éç”?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: 宋体">栈顶的集å?/span></p> <p><span style="font-family: 'Courier New'">id:</span><span style="font-family: 宋体">可选属性,指定集合里元素的</span><span style="font-family: 'Courier New'">id</span><span style="font-family: 宋体">åQˆå·²è¢«æ ‡æ³¨äØ“˜q‡æ—¶åQ?/span></p> <p><span style="font-family: 'Courier New'">status:</span><span style="font-family: 宋体">可选属性,该属性指定è„P代时çš?/span><span style="font-family: 'Courier New'">iteratorStatus</span><span style="font-family: 宋体">实例åQŒè¯¥å®žä¾‹åŒ…含如下几个æ–ÒŽ³•åQ?/span></p> <p><span style="font-family: 'Courier New'">    int getCount(),</span><span style="font-family: 宋体">˜q”回当前˜q­ä»£äº†å‡ ä¸ªå…ƒç´?/span></p> <p><span style="font-family: 'Courier New'">    int getIndex(),</span><span style="font-family: 宋体">˜q”回当前˜q­ä»£å…ƒç´ çš„烦å¼?/span></p> <p><span style="font-family: 'Courier New'">    Boolean isEven(),</span><span style="font-family: 宋体">˜q”回当前被è„P代元素的索引是否是偶æ•?/span></p> <p><span style="font-family: 'Courier New'">    Boolean isOdd(),</span><span style="font-family: 宋体">˜q”回当前被è„P代元素的索引是否是奇æ•?/span></p> <p><span style="font-family: 'Courier New'">    Boolean isFirst(),</span><span style="font-family: 宋体">˜q”回当前被è„P代元素是否是½W¬ä¸€ä¸ªå…ƒç´?/span></p> <p><span style="font-family: 'Courier New'">    Boolean isLast(),</span><span style="font-family: 宋体">˜q”回当前被è„P代元素是否是最后一个元ç´?/span></p> <p><strong><span style="font-family: 'Courier New'">if/elseif/else </span></strong><strong><span style="font-family: 宋体">逻辑判断</span></strong></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:set</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"age"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"323"</span></em> <span style="color: #7f007f">scope</span><span style="color: black">=</span><em><span style="color: #2a00ff">"request"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:if</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">test</span><span style="color: black">=</span><em><span style="color: #2a00ff">"#request.age==23"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    23</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:if</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:elseif</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">test</span><span style="color: black">=</span><em><span style="color: #2a00ff">"#request.age==21"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    21</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:elseif</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:else</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: black; font-family: 宋体">都不½{?/span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:else</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><strong><span style="font-family: 'Courier New'">url</span></strong><strong><span style="font-family: 宋体">标签</span></strong></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">a</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">href</span><span style="color: black">=</span>"<span style="color: teal"><</span><span style="color: #3f7f7f">s:url</span> <span style="color: #7f007f">action</span><span style="color: black">=</span><em><span style="color: #2a00ff">"helloworld_add"</span></em> <span style="color: #7f007f">namespace</span><span style="color: black">=</span><em><span style="color: #2a00ff">"/test"</span></em><span style="color: teal">><</span><span style="color: #3f7f7f">s:param</span> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"personid"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"233"</span></em><span style="color: teal">/></</span><span style="color: #3f7f7f">s:url</span><span style="color: teal">></span>"<span style="color: teal">></span><u><span style="color: black">ssss</span></u><span style="color: teal"></</span><span style="background: silver; color: #3f7f7f">a</span><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:set</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"myurl"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"'http://www.foshanshop.net'"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:url</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"%{#myurl}"</span></em> <span style="color: teal">/><</span><span style="color: #3f7f7f">br</span><span style="color: teal">></span></span></p> <p><strong><span style="font-family: 'Courier New'">checkboxlist</span></strong><strong><span style="font-family: 宋体">复选框</span></strong><strong><span style="font-family: 'Courier New'">/radio </span></strong><strong><span style="font-family: 宋体">单选框</span></strong><strong><span style="font-family: 'Courier New'">/select</span></strong><strong><span style="font-family: 宋体">下拉列表æ¡?/span></strong></p> <p><span style="font-family: 'Courier New'">    </span><span style="font-family: 宋体">集合ä¸?/span><span style="font-family: 'Courier New'">list:</span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:checkboxlist</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"list"</span></em></span></p> <p style="margin-left: 47.25pt"><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">list</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><em><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"{'Java','.Net','RoR','PHP'}"</span></em><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"{'Java','.Net'}"</span></em><span style="color: teal">/><</span><span style="color: #3f7f7f">br</span><span style="color: teal">/></span></span></p> <p><span style="font-family: 'Courier New'">    </span><span style="font-family: 宋体">集合ä¸?/span><span style="font-family: 'Courier New'">map:</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:checkboxlist</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"map"</span></em> <span style="color: #7f007f">list</span><span style="color: black">=</span>"<span style="color: black">#{1:'</span></span><span style="font-size: 10pt; color: black; font-family: 宋体">瑜珈用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',2:'</span><span style="font-size: 10pt; color: black; font-family: 宋体">户外用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',3:'</span><span style="font-size: 10pt; color: black; font-family: 宋体">球类</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',4:'</span><span style="font-size: 10pt; color: black; font-family: 宋体">自行è½?/span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">'}</span><span style="font-size: 10pt; font-family: 'Courier New'">"</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">     <span style="color: #7f007f">listKey</span><span style="color: black">=</span><em><span style="color: #2a00ff">"key"</span></em> <span style="color: #7f007f">listValue</span><span style="color: black">=</span><em><span style="color: #2a00ff">"value"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"{1,2,3}"</span></em><span style="color: teal">/><</span><span style="color: #3f7f7f">br</span><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">     </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:radio</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"raido1"</span></em> <span style="color: #7f007f">list</span><span style="color: black">=</span>"<span style="color: black">#{1:'</span></span><span style="font-size: 10pt; color: black; font-family: 宋体">瑜珈用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',2:'</span><span style="font-size: 10pt; color: black; font-family: 宋体">户外用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',3:'</span><span style="font-size: 10pt; color: black; font-family: 宋体">球类</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',4:'</span><span style="font-size: 10pt; color: black; font-family: 宋体">自行è½?/span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">'}</span><span style="font-size: 10pt; font-family: 'Courier New'">" <span style="color: #7f007f">listKey</span><span style="color: black">=</span><em><span style="color: #2a00ff">"key"</span></em> <span style="color: #7f007f">listValue</span><span style="color: black">=</span><em><span style="color: #2a00ff">"value"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"1"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">     </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">br</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">/></span></p> <p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">     </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:select</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"se"</span></em> <span style="color: #7f007f">list</span><span style="color: black">=</span>"<span style="color: black">#{1:'</span></span><span style="font-size: 10pt; color: black; font-family: 宋体">瑜珈用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',2:'</span><span style="font-size: 10pt; color: black; font-family: 宋体">户外用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',3:'</span><span style="font-size: 10pt; color: black; font-family: 宋体">球类</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',4:'</span><span style="font-size: 10pt; color: black; font-family: 宋体">自行è½?/span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">'}</span><span style="font-size: 10pt; font-family: 'Courier New'">" <span style="color: #7f007f">listKey</span><span style="color: black">=</span><em><span style="color: #2a00ff">"key"</span></em> <span style="color: #7f007f">listValue</span><span style="color: black">=</span><em><span style="color: #2a00ff">"value"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"1"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'"><!-- </span><span style="font-size: 10pt; color: #3f5fbf; font-family: 宋体">默认的视图主é¢?/span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">,</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 宋体">即不需è¦?/span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">struts2</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 宋体">åœ¨é¡µé¢äØ“æˆ‘ä»¬è¾“å‡ºä¸€äº›ä»£ç ?/span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'"> --></span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">constant</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.ui.theme"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"simple"</span></em> <span style="color: teal">/><br /> <br /> <br />   </p> <p><span style="font-family: 宋体">二十五、国际化</span></p> <p><span style="font-family: 宋体">目前对笔者不适用åQŒç”±äºŽæ—¶é—´ç´§˜q«ï¼Œä¸å†è®°å½•</span></p> </span></span></span> <img src ="http://www.aygfsteel.com/jzone/aggbug/321315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-19 01:24 <a href="http://www.aygfsteel.com/jzone/articles/321315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点½W”è®°åQˆäº”åQ?/title><link>http://www.aygfsteel.com/jzone/articles/321123.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 16 May 2010 16:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/321123.html</guid><description><![CDATA[     摘要: 二十一、Struts2对action中所有方法进行输入校éª?在Struts2中,我们可以实现对action的所有方法进行校验或者对action指定æ–ÒŽ³•˜q›è¡Œæ ¡éªŒ 对于输入校验struts2提供了两¿Uå®žçŽ°æ–¹æ³•ï¼š 1åQŽé‡‡ç”¨æ‰‹å·¥ç¼–写代码实çŽ?重写validateæ–ÒŽ³•åQŒvalidateæ–ÒŽ³•会校验action中所有与executeæ–ÒŽ³•½{‘֐ç›¸åŒçš„æ–¹æ³•。当某个数据校验å¤ÞpÓ|æ—Óž¼Œæˆ‘们应该调用addFieldE...  <a href='http://www.aygfsteel.com/jzone/articles/321123.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jzone/aggbug/321123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-17 00:22 <a href="http://www.aygfsteel.com/jzone/articles/321123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点½W”è®°åQˆå››åQ?/title><link>http://www.aygfsteel.com/jzone/articles/321122.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 16 May 2010 16:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/321122.html</guid><description><![CDATA[     摘要: 十九、文件上传三部曲 ½W¬ä¸€æ­¥ã€jaræ–‡äšg的准å¤?commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar ½W¬äºŒæ­¥ã€æŠŠform表的enctype讄¡½®ä¸ºï¼šmultipart/form-data <%@ page language="java" import="java.util.*" pageEncodin...  <a href='http://www.aygfsteel.com/jzone/articles/321122.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jzone/aggbug/321122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-17 00:14 <a href="http://www.aygfsteel.com/jzone/articles/321122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点½W”è®°åQˆä¸‰åQ?/title><link>http://www.aygfsteel.com/jzone/articles/321073.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 15 May 2010 19:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/321073.html</guid><description><![CDATA[<span style="font-size: 10pt; font-family: 宋体">十三ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">的处理流½E?/span> <p><span style="font-size: 10pt; font-family: 'Courier New'">requestâ€?gt;StrutsPrepareAndExecuteFilter</span><span style="font-size: 10pt; font-family: Wingdings">à</span><span style="font-size: 10pt; font-family: 'Courier New'">Interceptor(Struts2</span><span style="font-size: 10pt; font-family: 宋体">内置的一些拦截器或用戯‚‡ªå®šä¹‰æ‹¦æˆªå™?/span><span style="font-size: 10pt; font-family: 'Courier New'">)</span><span style="font-size: 10pt; font-family: Wingdings">à</span><span style="font-size: 10pt; font-family: 'Courier New'">Action(</span><span style="font-size: 10pt; font-family: 宋体">用户¾~–写çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: 宋体">åQŒç±»ä¼?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts1</span><span style="font-size: 10pt; font-family: 宋体">中的</span><span style="font-size: 10pt; font-family: 'Courier New'">Action)</span><span style="font-size: 10pt; font-family: Wingdings">à</span><span style="font-size: 10pt; font-family: 'Courier New'">Result(</span><span style="font-size: 10pt; font-family: 宋体">¾cÖM¼¼</span><span style="font-size: 10pt; font-family: 'Courier New'">Struts1</span><span style="font-size: 10pt; font-family: 宋体">中的</span><span style="font-size: 10pt; font-family: 'Courier New'">forward)</span><span style="font-size: 10pt; font-family: Wingdings">à</span><span style="font-size: 10pt; font-family: 'Courier New'">Jsp/Html</span><span style="font-size: 10pt; font-family: Wingdings">à</span><span style="font-size: 10pt; font-family: 'Courier New'">response</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">StrutsPrepareAndExccuterFilter</span><span style="font-size: 10pt; font-family: 宋体">æ˜?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">框架的核心控制器åQŒå®ƒè´Ÿè´£æ‹¦æˆªç”?/span><span style="font-size: 10pt; font-family: 'Courier New'"><url-pattern>/*</url-pattern></span><span style="font-size: 10pt; font-family: 宋体">指定的所有用戯‚¯·æ±‚,当用戯‚¯·æ±‚到达时åQŒè¯¥</span><span style="font-size: 10pt; font-family: 'Courier New'">Filter</span><span style="font-size: 10pt; font-family: 宋体">会过滤用æˆïLš„è¯äh±‚。默认情况下åQŒå¦‚果用戯‚¯·æ±‚的路径不带后缀或者后¾~€ä»?/span><span style="font-size: 10pt; font-family: 'Courier New'">.action</span><span style="font-size: 10pt; font-family: 宋体">¾l“å°¾åQŒè¿™æ—¶è¯·æ±‚将被è{å…?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">框架处理åQŒå¦åˆ?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">框架ž®†è¿‡æ»¤è¯¥è¯äh±‚的处理。当è¯äh±‚转入</span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">框架处理时会¾lè¿‡ä¸€¾pÕdˆ—的拦截器åQŒç„¶åŽå†è½¬åˆ°</span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: 宋体">ã€?strong>ä¸?/strong></span><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts1</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">不同åQ?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">对用æˆäh¯ä¸€‹Æ¡è¯·æ±‚都会创å»ÞZ¸€ä¸?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Action</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">åQŒæ‰€ä»?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">çš?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Action</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">是线½E‹å®‰å…¨çš„<br /> </span></strong></p> <p><span style="font-size: 10pt; font-family: 宋体"><br /> <br /> 十四ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">指定多个配置文äšg</span></p> <p><span style="font-size: 10pt; font-family: 宋体">ž®†é…¾|®æ–‡ä»¶ä»¥æ¨¡å—˜q›è¡Œåˆ’分åQŒç„¶åŽé€šè¿‡</span><span style="font-size: 10pt; font-family: 'Courier New'">include</span><span style="font-size: 10pt; font-family: 宋体">导入</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><?</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">xml</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">version</span><span style="color: black">=</span><em><span style="color: #2a00ff">"1.0"</span></em> <span style="color: #7f007f">encoding</span><span style="color: black">=</span><em><span style="color: #2a00ff">"UTF-8"</span></em> <span style="color: teal">?></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><!</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">DOCTYPE</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: teal">struts</span> <span style="color: gray">PUBLIC</span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">    <span style="color: teal">"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"</span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">    <span style="color: #3f7f5f">"http://struts.apache.org/dtds/struts-2.0.dtd"</span><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">struts</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">include</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">file</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts-user.xml"</span></em><span style="color: teal">></</span><span style="color: #3f7f7f">include</span><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">include</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">file</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts-trade.xml"</span></em><span style="color: teal">></</span><span style="color: #3f7f7f">include</span><span style="color: teal">></span></span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">struts</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">><br /> </span></p> <p><span style="font-size: 10pt; font-family: 宋体"><br /> <br /> 十五ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">动态方法调ç”?/span><span style="font-size: 10pt; font-family: 'Courier New'">(</span><span style="font-size: 10pt; font-family: 宋体">åœ?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2.1</span><span style="font-size: 10pt; font-family: 宋体">版本文档中已¾lä¸æŽ¨èä½¿ç”¨äº?/span><span style="font-size: 10pt; font-family: 'Courier New'">)</span></p> <p><span style="font-size: 10pt; font-family: 宋体">如果åœ?/span><span style="font-size: 10pt; font-family: 'Courier New'">action</span><span style="font-size: 10pt; font-family: 宋体">中存在多个方法时åQŒæˆ‘们可以ä‹Éç”?/span><span style="font-size: 10pt; font-family: 'Courier New'">!+</span><span style="font-size: 10pt; font-family: 宋体">æ–ÒŽ³•æ–ÒŽ³•名调用指定的æ–ÒŽ³•åQŒå¦‚下:</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">public class HelloWorldAction{</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    private String message;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    public String getMessage(){</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       return message;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">public String execute() throws Exception{</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    this.message = “</span><span style="font-size: 10pt; font-family: 宋体">我是</span><span style="font-size: 10pt; font-family: 'Courier New'">execute</span><span style="font-size: 10pt; font-family: 宋体">æ–ÒŽ³•</span><span style="font-size: 10pt; font-family: 'Courier New'">”</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    return “success”;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">public String other() throw Exception{</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    this.message = “</span><span style="font-size: 10pt; font-family: 宋体">我是</span><span style="font-size: 10pt; font-family: 'Courier New'">other</span><span style="font-size: 10pt; font-family: 宋体">æ–ÒŽ³•</span><span style="font-size: 10pt; font-family: 'Courier New'">”;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: 宋体">假设讉K—®ä¸Šé¢çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">action</span><span style="font-size: 10pt; font-family: 宋体">çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">URL</span><span style="font-size: 10pt; font-family: 宋体">路径为:</span><span style="font-size: 10pt; font-family: 'Courier New'">/struts2/test/helloworld.action</span></p> <p><span style="font-size: 10pt; font-family: 宋体">要访é—?/span><span style="font-size: 10pt; font-family: 'Courier New'">action</span><span style="font-size: 10pt; font-family: 宋体">çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">other</span><span style="font-size: 10pt; font-family: 宋体">æ–ÒŽ³•åQŒæˆ‘们可以这栯‚°ƒç”¨ï¼š</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">/struts2/test/helloworld!other.action</span></p> <p><span style="font-size: 10pt; font-family: 宋体">如果不想使用动态方法调用,我们可以通过帔R‡</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.enable.DynamicMethodInvocation</span><span style="font-size: 10pt; font-family: 宋体">关闭动态方法调ç”?/span><span style="font-size: 10pt; font-family: 'Courier New'">.</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'"><constant name=”struts.enable.DynamicMethodInvocation” value=”false”/></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">使用通配½W¦å®šä¹?/span><span style="font-size: 10pt; font-family: 'Courier New'">action(</span><span style="font-size: 10pt; font-family: 宋体">官方推荐</span><span style="font-size: 10pt; font-family: 'Courier New'">) </span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'"><package name=”employee” </span></p> <p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">namespace=”/control/employee” extends=”struts-default”></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    <action name=”list_*” </span></p> <p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">class=”cn.itcast.action.HellWorldAction method=”{1}”></span></p> <p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'"><result name=”success”></span></p> <p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    /WEB-INF/page/message.jsp</span></p> <p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'"></result></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    </action></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'"></package></span></p> <p><strong><span style="font-size: 10pt; font-family: 宋体">注:</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">a). *</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">通配½W¦å¯ä»¥æ·»åŠ å¤šä¸?/span></strong><strong><span style="font-size: 10pt; font-family: 宋体">å¦?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">: list_*_*_*</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">b). method=”{1}” </span></strong><strong><span style="font-size: 10pt; font-family: 宋体">表示取第一ä¸?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">*</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">c). </span></strong><strong><span style="font-size: 10pt; font-family: 宋体">通配½W¦å¯ä»¥æ”¾¾|®å¤šä¸ªåœ°æ–?/span></strong><strong><span style="font-size: 10pt; font-family: 宋体">å¦?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'"> class</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">ã€?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">result</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">ä¸?/span></strong></p> <p><strong> <br /> </strong></p> <p><span style="font-size: 10pt; font-family: 宋体">十六ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2 </span><span style="font-size: 10pt; font-family: 宋体">è¯äh±‚参数的接å?/span></p> <p><span style="font-size: 10pt; font-family: 宋体">以下两种æ–ÒŽ³•åQŒå½“参数比较多的时候,用第一¿Uæ–¹æ³•,ž®†ä¼šå‘现</span><span style="font-size: 10pt; font-family: 'Courier New'">action</span><span style="font-size: 10pt; font-family: 宋体">中有很多</span><span style="font-size: 10pt; font-family: 'Courier New'">setter</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">getter</span><span style="font-size: 10pt; font-family: 宋体">æ–ÒŽ³•åQŒè¿™æ ·ä¸åˆ©äºŽé˜…读</span><span style="font-size: 10pt; font-family: 'Courier New'">action</span><span style="font-size: 10pt; font-family: 宋体">åQŒæ‰€ä»¥å¾è®®ä‹É用第二种ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">a). </span><span style="font-size: 10pt; font-family: 宋体">采用基本¾cÕdž‹æŽ¥æ”¶è¯äh±‚参数</span><span style="font-size: 10pt; font-family: 'Courier New'">(get/post)</span></p> <p><span style="font-size: 10pt; font-family: 宋体">åœ?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: 宋体">¾cÖM¸­å®šä¹‰ä¸Žè¯·æ±‚参数同名的属性,</span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">便能接受è¯äh±‚参数òq¶èµ‹å€¼ç»™åŒåå±žæ€§ï¼š</span></p> <p><span style="font-size: 10pt; font-family: 宋体">如:è¯äh±‚路径åQ?/span><span style="font-size: 10pt; font-family: 'Courier New'"><a href="http://localhost:8080/test/view.action?id=78">http://localhost:8080/test/view.action?id=78</a></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">public class ProductAction{</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    private Integer id;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    //struts2</span><span style="font-size: 10pt; font-family: 宋体">通过反射技术调用与è¯äh±‚参数同名的属性的</span><span style="font-size: 10pt; font-family: 'Courier New'">setter</span><span style="font-size: 10pt; font-family: 宋体">æ–ÒŽ³•来获取请求参数å€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    public void setId(Integer id) {</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       this.id = id;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">public Integer getId{</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    return id;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">b). </span><span style="font-size: 10pt; font-family: 宋体">采用½W¦åˆ¾cÕdž‹æŽ¥æ”¶è¯äh±‚参数</span></p> <p><span style="font-size: 10pt; font-family: 宋体">如:è¯äh±‚路径åQ?/span><span style="font-size: 10pt; font-family: 'Courier New'"><a href="http://localhost:8080/test/view.action?product.id=78">http://localhost:8080/test/view.action?product.id=78</a></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">public class ProductAction{</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    private Product product;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    public void setProduct(Product product) {</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       this.product = product;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">public Product getProduct() {</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    return product;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">首先通过反射技术调ç”?/span><span style="font-size: 10pt; font-family: 'Courier New'">Product</span><span style="font-size: 10pt; font-family: 宋体">的默认构造器创徏</span><span style="font-size: 10pt; font-family: 'Courier New'">product</span><span style="font-size: 10pt; font-family: 宋体">对象然后在通过反射技术调ç”?/span><span style="font-size: 10pt; font-family: 'Courier New'">product</span><span style="font-size: 10pt; font-family: 宋体">中与è¯äh±‚参数同名的属性的</span><span style="font-size: 10pt; font-family: 'Courier New'">setter</span><span style="font-size: 10pt; font-family: 宋体">æ–ÒŽ³•来获取请求参æ•?br /> </span></p> <p><span style="font-size: 10pt; font-family: 宋体"><br /> <br /> 十七ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">有两¿Uç±»åž‹è{换器</span></p> <p><span style="font-size: 10pt; font-family: 宋体">局部类型è{换器</span><span style="font-size: 10pt; font-family: 'Courier New'">/</span><span style="font-size: 10pt; font-family: 宋体">全部¾cÕdž‹è½¬æ¢å™?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">a). </span><span style="font-size: 10pt; font-family: 宋体">自定义è{换类åž?/span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">package</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> <u>cn.itcast.type.converter</u>;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">import</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> java.text.ParseException;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">import</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> java.text.SimpleDateFormat;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">import</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> java.util.Date;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">import</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> java.util.Map;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">import</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">public</span></strong><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">class</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> <u>DateTypeConverter</u> </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">extends</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> DefaultTypeConverter {</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    <u>@</u></span><u><span style="font-size: 10pt; color: #646464; font-family: 'Courier New'">Override</span></u></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">public</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> Object convertValue(Map<<u>String, Object</u>> context, Object value, Class toType) {</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       SimpleDateFormat dateFormat = </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">new</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> SimpleDateFormat(</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"yyyyMMdd"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">try</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> { </span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">           </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">if</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">(toType == Date.</span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">class</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">){</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">//</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体">当字½W¦ä¸²å?/span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">Date</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体">¾cÕdž‹è½¬æ¢æ—?/span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">              String[] params = (String[]) value;</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">// request.getParameterValues() </span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">              </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">return</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> dateFormat.parse(params[0]);</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">           }</span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">else</span></strong><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">if</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">(toType == String.</span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">class</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">){</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">//</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体">å½?/span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">Date</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体">转换成字½W¦ä¸²æ—?/span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">              Date date = (Date) value;</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">              </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">return</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> dateFormat.format(date);</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">           }</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       } </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">catch</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> (ParseException e) {}</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">return</span></strong><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">null</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">;</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    }</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: 宋体">完成具体的双向è{化代码后åQŒéœ€è¦å°†ä¸Šé¢çš„ç±»åž‹æ³¨å†ŒäØ“å±€éƒ¨ç±»åž‹è{换器åQ?/span></p> <p><span style="font-size: 10pt; font-family: 宋体">åœ?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: 宋体">¾cÀL‰€æœ‰çš„包下攄¡½®</span><span style="font-size: 10pt; font-family: 'Courier New'">ActionClassName-conversion.properties</span><span style="font-size: 10pt; font-family: 宋体">æ–‡äšgåQ?/span><span style="font-size: 10pt; font-family: 'Courier New'">ActionClassName</span><span style="font-size: 10pt; font-family: 宋体">æ˜?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: 宋体">的类名,后面çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">-conversion.properties</span><span style="font-size: 10pt; font-family: 宋体">是固定写法,对于本例而言åQŒæ–‡ä»¶çš„åç§°åº”äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">HelloWroldAction-conversion.properties</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">properties</span><span style="font-size: 10pt; font-family: 宋体">æ–‡äšg中的内容为:</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">birthday=cn.itcast.type.converter.DateTypeConverter</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">b).</span><span style="font-size: 10pt; font-family: 宋体">自定义全局¾cÕdž‹è½¬æ¢å™?/span></p> <p><span style="font-size: 10pt; font-family: 宋体">ž®†ä¸Šé¢çš„局部类型è{换器注册为全局¾cÕdž‹è½¬æ¢å™¨ï¼š</span></p> <p><span style="font-size: 10pt; font-family: 宋体">åœ?/span><span style="font-size: 10pt; font-family: 'Courier New'">WEB-INF/classes</span><span style="font-size: 10pt; font-family: 宋体">下放¾|?/span><span style="font-size: 10pt; font-family: 'Courier New'">xwork-conversion.properties</span><span style="font-size: 10pt; font-family: 宋体">æ–‡äšg。在</span><span style="font-size: 10pt; font-family: 'Courier New'">properties</span><span style="font-size: 10pt; font-family: 宋体">æ–‡äšg中的内容为:</span></p> <p><span style="font-size: 10pt; font-family: 宋体">å¾…è{换的¾cÕdž‹</span><span style="font-size: 10pt; font-family: 'Courier New'">=</span><span style="font-size: 10pt; font-family: 宋体">¾cÕdž‹è½¬æ¢å™¨çš„全类å?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">java.util.Date=cn.itcast.conversion.DateConverter<br /> </span></p> <p><span style="font-size: 10pt; font-family: 宋体"><br /> <br /> <br /> 十八、访问或æ·ÕdŠ </span><span style="font-size: 10pt; font-family: 'Courier New'">request/session/application</span><span style="font-size: 10pt; font-family: 宋体">属æ€?/p> <p><span style="font-size: 10pt; font-family: 'Courier New'">import java.util.Arrays;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">import javax.servlet.ServletContext;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">import javax.servlet.http.HttpServletRequest;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">import org.apache.struts2.ServletActionContext;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">import com.opensymphony.xwork2.ActionContext;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">public class HelloWorldAction {</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    public String execute(){</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ActionContext ctx = ActionContext.getContext();</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ctx.getApplication().put("app", "</span><span style="font-size: 10pt; font-family: 宋体">应用范围</span><span style="font-size: 10pt; font-family: 'Courier New'">");//</span><span style="font-size: 10pt; font-family: 宋体">å¾€</span><span style="font-size: 10pt; font-family: 'Courier New'">ServletContext</span><span style="font-size: 10pt; font-family: 宋体">里放å…?/span><span style="font-size: 10pt; font-family: 'Courier New'">app</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ctx.getSession().put("ses", "session</span><span style="font-size: 10pt; font-family: 宋体">范围</span><span style="font-size: 10pt; font-family: 'Courier New'">");//</span><span style="font-size: 10pt; font-family: 宋体">å¾€</span><span style="font-size: 10pt; font-family: 'Courier New'">session</span><span style="font-size: 10pt; font-family: 宋体">里放å…?/span><span style="font-size: 10pt; font-family: 'Courier New'">ses</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ctx.put("req", "request</span><span style="font-size: 10pt; font-family: 宋体">范围</span><span style="font-size: 10pt; font-family: 'Courier New'">");//</span><span style="font-size: 10pt; font-family: 宋体">å¾€</span><span style="font-size: 10pt; font-family: 'Courier New'">request</span><span style="font-size: 10pt; font-family: 宋体">里放å…?/span><span style="font-size: 10pt; font-family: 'Courier New'">req</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ctx.put("names", Arrays.asList("</span><span style="font-size: 10pt; font-family: 宋体">老张</span><span style="font-size: 10pt; font-family: 'Courier New'">", "</span><span style="font-size: 10pt; font-family: 宋体">老黎</span><span style="font-size: 10pt; font-family: 'Courier New'">", "</span><span style="font-size: 10pt; font-family: 宋体">老方</span><span style="font-size: 10pt; font-family: 'Courier New'">"));</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       return "message";</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    }</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    public String rsa() throws Exception{</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       HttpServletRequest request = ServletActionContext.getRequest();</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ServletContext servletContext = ServletActionContext.getServletContext();</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       request.setAttribute("req", "</span><span style="font-size: 10pt; font-family: 宋体">è¯äh±‚范围属æ€?/span><span style="font-size: 10pt; font-family: 'Courier New'">");</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       request.getSession().setAttribute("ses", "</span><span style="font-size: 10pt; font-family: 宋体">会话范围属æ€?/span><span style="font-size: 10pt; font-family: 'Courier New'">");</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       servletContext.setAttribute("app", "</span><span style="font-size: 10pt; font-family: 宋体">应用范围属æ€?/span><span style="font-size: 10pt; font-family: 'Courier New'">");</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       //HttpServletResponse response = ServletActionContext.getResponse();</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       return "message";</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    }</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">}</span><br /> </p> <p></span><span style="font-size: 10pt; font-family: 宋体">备注åQ?/span><span style="font-size: 10pt; font-family: 'Courier New'">ognl</span><span style="font-size: 10pt; font-family: 宋体">表达式其实完全可以通过</span><span style="font-size: 10pt; font-family: 'Courier New'">JSTL</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">EL</span><span style="font-size: 10pt; font-family: 宋体">¾l“合来代æ›?/span><span style="font-size: 10pt; font-family: 'Courier New'">ognl</span></p> <img src ="http://www.aygfsteel.com/jzone/aggbug/321073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-16 03:09 <a href="http://www.aygfsteel.com/jzone/articles/321073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点½W”è®°åQˆäºŒåQ?/title><link>http://www.aygfsteel.com/jzone/articles/321072.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 15 May 2010 19:08:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/321072.html</guid><description><![CDATA[<span style="font-size: 10pt; font-family: 宋体">十二ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: 宋体">帔R‡ä¸€è§ˆï¼ˆå¸¸ç”¨çš„以¾_—体昄¡¤ºäº†ï¼‰</span> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.configuration </span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指定加è½?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">配置文äšg的配¾|®æ–‡ä»¶ç®¡ç†å™¨ã€‚该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">org.apache.Struts2.config.DefaultConfiguration</span><span style="font-size: 10pt; font-family: 宋体">åQŒè¿™æ˜?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">默认的配¾|®æ–‡ä»¶ç®¡ç†å™¨ã€‚如果需要实现自å·Þqš„配置½Ž¡ç†å™¨ï¼Œå¼€å‘者则可以实现一个实çŽ?/span><span style="font-size: 10pt; font-family: 'Courier New'">Configuration</span><span style="font-size: 10pt; font-family: 宋体">接口的类åQŒè¯¥¾cÕd¯ä»¥è‡ªå·±åŠ è½?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">配置文äšgã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.locale</span></p> <p><span style="font-size: 10pt; font-family: 宋体">指定</span><span style="font-size: 10pt; font-family: 'Courier New'">Web</span><span style="font-size: 10pt; font-family: 宋体">应用的默è®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Locale</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span><strong> </strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.i18n.encoding</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 宋体">指定</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Web</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">应用的默认编码集。该属性对于处理中文请求参数非常有用,对于获取中文è¯äh±‚参数å€û|¼Œåº”该ž®†è¯¥å±žæ€§å€ÆD®¾¾|®äØ“</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">GBK</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">或è€?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">GB2312</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">ã€?/span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 宋体">提示åQšå½“讄¡½®è¯¥å‚æ•îCØ“</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">GBK</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">æ—Óž¼Œç›¸å½“于调ç”?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">HttpServletRequest</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">çš?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">setCharacterEncoding</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">æ–ÒŽ³•ã€?/span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.objectFactory</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 宋体">指定</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">默认çš?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">ObjectFactory Bean</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">åQŒè¯¥å±žæ€§é»˜è®¤å€¼æ˜¯</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">spring</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">ã€?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.objectFactory.spring.autoWrite</span></p> <p><span style="font-size: 10pt; font-family: 宋体">指定</span><span style="font-size: 10pt; font-family: 'Courier New'">Spring</span><span style="font-size: 10pt; font-family: 宋体">框架的自动装配模式,该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">name</span><span style="font-size: 10pt; font-family: 宋体">åQŒå³é»˜è®¤æ ÒŽ®</span><span style="font-size: 10pt; font-family: 'Courier New'">Bean</span><span style="font-size: 10pt; font-family: 宋体">çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">name</span><span style="font-size: 10pt; font-family: 宋体">属性自动装配ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.objectFactory.spring.useClassCache</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指定整å?/span><span style="font-size: 10pt; font-family: 'Courier New'">Spring</span><span style="font-size: 10pt; font-family: 宋体">框架æ—Óž¼Œæ˜¯å¦¾~“å­˜</span><span style="font-size: 10pt; font-family: 'Courier New'">Bean</span><span style="font-size: 10pt; font-family: 宋体">实例åQŒè¯¥å±žæ€§åªå…è®¸ä½¿ç”¨</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">å’?/span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: 宋体">两个属性å€û|¼Œå®ƒçš„默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">。通常不徏议修改该属性倹{€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.objectTypeDeterminer</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">的类型检‹¹‹æœºåˆÓž¼Œé€šå¸¸æ”¯æŒ</span><span style="font-size: 10pt; font-family: 'Courier New'">tiger</span><span style="font-size: 10pt; font-family: 宋体">å’?/span><span style="font-size: 10pt; font-family: 'Courier New'">notiger</span><span style="font-size: 10pt; font-family: 宋体">两个属性倹{€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.multipart.parser</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指定处ç?/span><span style="font-size: 10pt; font-family: 'Courier New'">multipart/form-data</span><span style="font-size: 10pt; font-family: 宋体">çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">MIME</span><span style="font-size: 10pt; font-family: 宋体">¾cÕdž‹åQˆæ–‡ä»¶ä¸Šä¼ ï¼‰è¯äh±‚的框æžÓž¼Œè¯¥å±žæ€§æ”¯æŒ?/span><span style="font-size: 10pt; font-family: 'Courier New'">cos</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">pell</span><span style="font-size: 10pt; font-family: 宋体">å’?/span><span style="font-size: 10pt; font-family: 'Courier New'">jakarta</span><span style="font-size: 10pt; font-family: 宋体">½{‰å±žæ€§å€û|¼Œå›_ˆ†åˆ«å¯¹åº”ä‹Éç”?/span><span style="font-size: 10pt; font-family: 'Courier New'">cos</span><span style="font-size: 10pt; font-family: 宋体">的文件上传框架ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">pell</span><span style="font-size: 10pt; font-family: 宋体">上传å?/span><span style="font-size: 10pt; font-family: 'Courier New'">common-fileupload</span><span style="font-size: 10pt; font-family: 宋体">æ–‡äšg上传框架。该属性的默认å€égØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">jakarta</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span></p> <p><span style="font-size: 10pt; font-family: 宋体">注意</span><span style="font-size: 10pt; font-family: 宋体">如果需要ä‹Éç”?/span><span style="font-size: 10pt; font-family: 'Courier New'">cos</span><span style="font-size: 10pt; font-family: 宋体">或è€?/span><span style="font-size: 10pt; font-family: 'Courier New'">pell</span><span style="font-size: 10pt; font-family: 宋体">的文件上传方式,则应该将对应çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">JAR</span><span style="font-size: 10pt; font-family: 宋体">æ–‡äšg复制åˆ?/span><span style="font-size: 10pt; font-family: 'Courier New'">Web</span><span style="font-size: 10pt; font-family: 宋体">应用中。例如,使用</span><span style="font-size: 10pt; font-family: 'Courier New'">cos</span><span style="font-size: 10pt; font-family: 宋体">上传方式åQŒåˆ™éœ€è¦è‡ªå·×ƒ¸‹è½?/span><span style="font-size: 10pt; font-family: 'Courier New'">cos</span><span style="font-size: 10pt; font-family: 宋体">框架çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">JAR</span><span style="font-size: 10pt; font-family: 宋体">æ–‡äšgåQŒåƈž®†è¯¥æ–‡äšg攑֜¨</span><span style="font-size: 10pt; font-family: 'Courier New'">WEB-INF/lib</span><span style="font-size: 10pt; font-family: 宋体">路径下ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.multipart.saveDir</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指定上传文件的临时保存路径åQŒè¯¥å±žæ€§çš„默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">javax.servlet.context.tempdir</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.multipart.maxSize</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">æ–‡äšg上传中整个请求内容允许的最大字节数ã€?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.custom.properties</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">应用加蝲用户自定义的属性文ä»Óž¼Œè¯¥è‡ªå®šä¹‰å±žæ€§æ–‡ä»¶æŒ‡å®šçš„属性不会覆ç›?/span><span style="font-size: 10pt; font-family: 'Courier New'">struts.properties</span><span style="font-size: 10pt; font-family: 宋体">æ–‡äšg中指定的属性。如果需要加载多个自定义属性文ä»Óž¼Œå¤šä¸ªè‡ªå®šä¹‰å±žæ€§æ–‡ä»¶çš„æ–‡äšg名以英文逗号åQ?/span><span style="font-size: 10pt; font-family: 'Courier New'">,</span><span style="font-size: 10pt; font-family: 宋体">åQ‰éš”å¼€ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.mapper.class</span></p> <p><span style="font-size: 10pt; font-family: 宋体">指定ž®?/span><span style="font-size: 10pt; font-family: 'Courier New'">HTTP</span><span style="font-size: 10pt; font-family: 宋体">è¯äh±‚映射到指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: 宋体">的映ž®„器åQ?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">提供了默认的映射器:</span><span style="font-size: 10pt; font-family: 'Courier New'">org.apache.struts2.dispatcher.mapper.DefaultActionMapper</span><span style="font-size: 10pt; font-family: 宋体">。默认映ž®„器æ ÒŽ®è¯äh±‚的前¾~€ä¸?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: 宋体">çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">name</span><span style="font-size: 10pt; font-family: 宋体">属性完成映ž®„ã€?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.action.extension</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 宋体">该属性指定需è¦?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">处理的请求后¾~€åQŒè¯¥å±žæ€§çš„默认值是</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">action</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">åQŒå³æ‰€æœ‰åŒ¹é…?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">*.action</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">的请求都ç”?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">处理。如果用户需要指定多个请求后¾~€åQŒåˆ™å¤šä¸ªåŽç¼€ä¹‹é—´ä»¥è‹±æ–‡é€—号åQ?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">,</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">åQ‰éš”å¼€ã€?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.serve.static</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性设¾|®æ˜¯å¦é€šè¿‡</span><span style="font-size: 10pt; font-family: 'Courier New'">JAR</span><span style="font-size: 10pt; font-family: 宋体">æ–‡äšg提供静态内å®ÒŽœåŠ¡ï¼Œè¯¥å±žæ€§åªæ”¯æŒ</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">å’?/span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: 宋体">属性å€û|¼Œè¯¥å±žæ€§çš„默认属性值是</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.serve.static.browserCache</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 宋体">该属性设¾|®æµè§ˆå™¨æ˜¯å¦¾~“存静态内宏V€‚当应用处于开发阶ŒD‰|—¶åQŒæˆ‘们希望每‹Æ¡è¯·æ±‚都获得服务器的最新响应,则可讄¡½®è¯¥å±žæ€§äØ“</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">false</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">åQŒç”Ÿäº§çŽ¯å¢ƒä¸‹å¯ä»¥¾~“å­˜ã€?/span></strong><strong> </strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.enable.DynamicMethodInvocation</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 宋体">该属性设¾|?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">是否支持动态方法调用,该属性的默认值是</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">true</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">。如果需要关闭动态方法调用,则可讄¡½®è¯¥å±žæ€§äØ“</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">false</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">ã€?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.enable.SlashesInActionNames</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性设¾|?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">是否允许åœ?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: 宋体">名中使用斜线åQŒè¯¥å±žæ€§çš„默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: 宋体">。如果开发者希望允许在</span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: 宋体">名中使用斜线åQŒåˆ™å¯è®¾¾|®è¯¥å±žæ€§äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.tag.altSyntax</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指定是否允许在</span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">标签中ä‹É用表辑ּè¯­æ³•åQŒå› ä¸ºé€šå¸¸éƒ½éœ€è¦åœ¨æ ‡ç­¾ä¸­ä‹É用表辑ּè¯­æ³•åQŒæ•…此属性应该设¾|®äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">åQŒè¯¥å±žæ€§çš„默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.devMode</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性设¾|?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">应用是否使用开发模式。如果设¾|®è¯¥å±žæ€§äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">åQŒåˆ™å¯ä»¥åœ¨åº”用出错时昄¡¤ºæ›´å¤šã€æ›´å‹å¥½çš„出错提½Cºã€‚该属性只接受</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">å’?/span><span style="font-size: 10pt; font-family: 'Courier New'">flase</span><span style="font-size: 10pt; font-family: 宋体">两个å€û|¼Œè¯¥å±žæ€§çš„默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: 宋体">。通常åQŒåº”用在开发阶ŒDµï¼Œž®†è¯¥å±žæ€§è®¾¾|®äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">åQŒå½“˜q›å…¥äº§å“å‘布阶段后,则该属性设¾|®äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.i18n.reload</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性设¾|®æ˜¯å¦æ¯‹Æ?/span><span style="font-size: 10pt; font-family: 'Courier New'">HTTP</span><span style="font-size: 10pt; font-family: 宋体">è¯äh±‚到达æ—Óž¼Œ¾pȝ»Ÿéƒ½é‡æ–°åŠ è½½èµ„æºæ–‡ä»¶ã€‚è¯¥å±žæ€§é»˜è®¤å€¼æ˜¯</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: 宋体">。在开发阶ŒDµå°†è¯¥å±žæ€§è®¾¾|®äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">会更有利于开发,但在产品发布阶段应将该属性设¾|®äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span></p> <p><span style="font-size: 10pt; font-family: 宋体">提示åQšå¼€å‘阶ŒDµå°†è¯¥å±žæ€§è®¾¾|®äº†</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">åQŒå°†å¯ä»¥åœ¨æ¯‹Æ¡è¯·æ±‚时都重新加载国际化资源文äšgåQŒä»Žè€Œå¯ä»¥è®©å¼€å‘者看到实时开发效果;产品发布阶段应该ž®†è¯¥å±žæ€§è®¾¾|®äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'"> false</span><span style="font-size: 10pt; font-family: 宋体">åQŒæ˜¯ä¸ÞZº†æä¾›å“åº”性能åQŒæ¯‹Æ¡è¯·æ±‚都需要重新加载资源文件会大大降低应用的性能ã€?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.ui.theme</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 宋体">该属性指定视图标½{ùN»˜è®¤çš„视图主题åQŒè¯¥å±žæ€§çš„默认值是</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">xhtml</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">ã€?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.ui.templateDir</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指定视图主题所需要模板文件的位置åQŒè¯¥å±žæ€§çš„默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">template</span><span style="font-size: 10pt; font-family: 宋体">åQŒå³é»˜è®¤åŠ è²</span><span style="font-size: 10pt; font-family: 'Courier New'">template</span><span style="font-size: 10pt; font-family: 宋体">路径下的模板文äšgã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.ui.templateSuffix</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指定模板文件的后缀åQŒè¯¥å±žæ€§çš„默认属性值是</span><span style="font-size: 10pt; font-family: 'Courier New'">ftl</span><span style="font-size: 10pt; font-family: 宋体">。该属性还允许使用</span><span style="font-size: 10pt; font-family: 'Courier New'">ftl</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">vm</span><span style="font-size: 10pt; font-family: 宋体">æˆ?/span><span style="font-size: 10pt; font-family: 'Courier New'">jsp</span><span style="font-size: 10pt; font-family: 宋体">åQŒåˆ†åˆ«å¯¹åº?/span><span style="font-size: 10pt; font-family: 'Courier New'">FreeMarker</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">Velocity</span><span style="font-size: 10pt; font-family: 宋体">å’?/span><span style="font-size: 10pt; font-family: 'Courier New'">JSP</span><span style="font-size: 10pt; font-family: 宋体">模板ã€?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.configuration.xml.reload</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 宋体">该属性设¾|®å½“</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.xml</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">æ–‡äšg改变后,¾pȝ»Ÿæ˜¯å¦è‡ªåŠ¨é‡æ–°åŠ è²è¯¥æ–‡ä»¶ã€‚è¯¥å±žæ€§çš„é»˜è®¤å€¼æ˜¯</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">false</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">åQŒå¼€å‘阶ŒDµå¾ˆå®žç”¨ã€?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.velocity.configfile</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Velocity</span><span style="font-size: 10pt; font-family: 宋体">框架所需çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">velocity.properties</span><span style="font-size: 10pt; font-family: 宋体">æ–‡äšg的位¾|®ã€‚该属性的默认å€égØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">velocity.properties</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.velocity.contexts</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Velocity</span><span style="font-size: 10pt; font-family: 宋体">框架çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">Context</span><span style="font-size: 10pt; font-family: 宋体">位置åQŒå¦‚果该框架有多ä¸?/span><span style="font-size: 10pt; font-family: 'Courier New'">Context</span><span style="font-size: 10pt; font-family: 宋体">åQŒåˆ™å¤šä¸ª</span><span style="font-size: 10pt; font-family: 'Courier New'">Context</span><span style="font-size: 10pt; font-family: 宋体">之间以英文逗号åQ?/span><span style="font-size: 10pt; font-family: 'Courier New'">,</span><span style="font-size: 10pt; font-family: 宋体">åQ‰éš”å¼€ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.velocity.toolboxlocation</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Velocity</span><span style="font-size: 10pt; font-family: 宋体">框架çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">toolbox</span><span style="font-size: 10pt; font-family: 宋体">的位¾|®ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.url.http.port</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Web</span><span style="font-size: 10pt; font-family: 宋体">应用所在的监听端口。该属性通常没有太大的用处,只是å½?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">需要生æˆ?/span><span style="font-size: 10pt; font-family: 'Courier New'">URL</span><span style="font-size: 10pt; font-family: 宋体">æ—Óž¼ˆä¾‹å¦‚</span><span style="font-size: 10pt; font-family: 'Courier New'">Url</span><span style="font-size: 10pt; font-family: 宋体">标签åQ‰ï¼Œè¯¥å±žæ€§æ‰æä¾›</span><span style="font-size: 10pt; font-family: 'Courier New'">Web</span><span style="font-size: 10pt; font-family: 宋体">应用的默认端口ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.url.https.port</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性类ä¼égºŽ</span><span style="font-size: 10pt; font-family: 'Courier New'">struts.url.http.port</span><span style="font-size: 10pt; font-family: 宋体">属性的作用åQŒåŒºåˆ«æ˜¯è¯¥å±žæ€§æŒ‡å®šçš„æ˜?/span><span style="font-size: 10pt; font-family: 'Courier New'">Web</span><span style="font-size: 10pt; font-family: 宋体">应用的加密服务端口ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.url.includeParams</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">生成</span><span style="font-size: 10pt; font-family: 'Courier New'">URL</span><span style="font-size: 10pt; font-family: 宋体">时是否包含请求参数。该属性接å?/span><span style="font-size: 10pt; font-family: 'Courier New'">none</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">get</span><span style="font-size: 10pt; font-family: 宋体">å’?/span><span style="font-size: 10pt; font-family: 'Courier New'">all</span><span style="font-size: 10pt; font-family: 宋体">三个属性å€û|¼Œåˆ†åˆ«å¯¹åº”于不包含、仅包含</span><span style="font-size: 10pt; font-family: 'Courier New'">GET</span><span style="font-size: 10pt; font-family: 宋体">¾cÕdž‹è¯äh±‚参数和包含全部请求参数ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.custom.i18n.resources</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">应用所需要的国际化资源文ä»Óž¼Œå¦‚果有多份国际化资源文äšgåQŒåˆ™å¤šä¸ªèµ„源文äšg的文件名以英文逗号åQ?/span><span style="font-size: 10pt; font-family: 'Courier New'">,</span><span style="font-size: 10pt; font-family: 宋体">åQ‰éš”å¼€ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.dispatcher.parametersWorkaround</span></p> <p><span style="font-size: 10pt; font-family: 宋体">对于某些</span><span style="font-size: 10pt; font-family: 'Courier New'">Java EE</span><span style="font-size: 10pt; font-family: 宋体">服务器,不支æŒ?/span><span style="font-size: 10pt; font-family: 'Courier New'">HttpServlet Request</span><span style="font-size: 10pt; font-family: 宋体">调用</span><span style="font-size: 10pt; font-family: 'Courier New'">getParameterMap()</span><span style="font-size: 10pt; font-family: 宋体">æ–ÒŽ³•åQŒæ­¤æ—¶å¯ä»¥è®¾¾|®è¯¥å±žæ€§å€égØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">来解册™¯¥é—®é¢˜ã€‚该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: 宋体">。对äº?/span><span style="font-size: 10pt; font-family: 'Courier New'"> WebLogic</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span><span style="font-size: 10pt; font-family: 'Courier New'">Orion</span><span style="font-size: 10pt; font-family: 宋体">å’?/span><span style="font-size: 10pt; font-family: 'Courier New'">OC4J</span><span style="font-size: 10pt; font-family: 宋体">服务器,通常应该讄¡½®è¯¥å±žæ€§äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.freemarker.manager.classname</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">使用çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">FreeMarker</span><span style="font-size: 10pt; font-family: 宋体">½Ž¡ç†å™¨ã€‚该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">org.apache.struts2.views.freemarker.FreemarkerManager</span><span style="font-size: 10pt; font-family: 宋体">åQŒè¿™æ˜?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">内徏çš?/span><span style="font-size: 10pt; font-family: 'Courier New'">FreeMarker</span><span style="font-size: 10pt; font-family: 宋体">½Ž¡ç†å™¨ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.freemarker.wrapper.altMap</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性只支持</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">å’?/span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: 宋体">两个属性å€û|¼Œé»˜è®¤å€¼æ˜¯</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">。通常无需修改该属性倹{€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.xslt.nocache</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">XSLT Result</span><span style="font-size: 10pt; font-family: 宋体">是否使用样式表缓存。当应用处于开发阶ŒD‰|—¶åQŒè¯¥å±žæ€§é€šå¸¸è¢«è®¾¾|®äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: 宋体">åQ›å½“应用处于产品使用阶段æ—Óž¼Œè¯¥å±žæ€§é€šå¸¸è¢«è®¾¾|®äØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: 宋体">ã€?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.configuration.files</span></p> <p><span style="font-size: 10pt; font-family: 宋体">该属性指å®?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">框架默认加蝲的配¾|®æ–‡ä»Óž¼Œå¦‚果需要指定默认加载多个配¾|®æ–‡ä»Óž¼Œåˆ™å¤šä¸ªé…¾|®æ–‡ä»¶çš„æ–‡äšg名之间以英文逗号åQ?/span><span style="font-size: 10pt; font-family: 'Courier New'">,</span><span style="font-size: 10pt; font-family: 宋体">åQ‰éš”开。该属性的默认å€égØ“</span><span style="font-size: 10pt; font-family: 'Courier New'">struts- default.xml,struts-plugin.xml,struts.xml</span><span style="font-size: 10pt; font-family: 宋体">åQŒçœ‹åˆ°è¯¥å±žæ€§å€û|¼Œè¯»è€…åº”è¯¥æ˜Žç™½äØ“ä»€ä¹?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: 宋体">框架默认加蝲</span><span style="font-size: 10pt; font-family: 'Courier New'">struts.xml</span><span style="font-size: 10pt; font-family: 宋体">æ–‡äšg了ã€?/span></p> <img src ="http://www.aygfsteel.com/jzone/aggbug/321072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-16 03:08 <a href="http://www.aygfsteel.com/jzone/articles/321072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点½W”è®°åQˆä¸€åQ?/title><link>http://www.aygfsteel.com/jzone/articles/321071.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 15 May 2010 18:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/321071.html</guid><description><![CDATA[     摘要: 一、Struts2 主要几句话: 1ã€?Struts2 是由webwork2发展来的而非Struts1åQŒç›¸æ¯”Struts1åQŒStruts2¾~–码规范跟类ä¼ég¸Žwebwork2 2、Struts2 非äçR入式设计、Struts1属于侵入式设è®?3、Struts1与ServletAPI、strutsAPI紧密耦合åQ›Struts1则不 4、Struts2 利用拦截器进行AOP¾~–程åQŒå®žçŽ°å¦‚æƒé™æ‹¦æˆªåŠŸèƒ½ ...  <a href='http://www.aygfsteel.com/jzone/articles/321071.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jzone/aggbug/321071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-16 02:59 <a href="http://www.aygfsteel.com/jzone/articles/321071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 转换å™?-Converterhttp://www.aygfsteel.com/jzone/articles/316885.htmlGavin.leeGavin.leeMon, 29 Mar 2010 17:06:00 GMThttp://www.aygfsteel.com/jzone/articles/316885.htmlhttp://www.aygfsteel.com/max/archive/2006/11/07/79602.html

Gavin.lee 2010-03-30 01:06 发表评论
]]>
Struts2 表单数据校验http://www.aygfsteel.com/jzone/articles/316881.htmlGavin.leeGavin.leeMon, 29 Mar 2010 16:43:00 GMThttp://www.aygfsteel.com/jzone/articles/316881.html阅读全文

Gavin.lee 2010-03-30 00:43 发表评论
]]>
Struts2 拦截å™?/title><link>http://www.aygfsteel.com/jzone/articles/316874.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Mon, 29 Mar 2010 15:17:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/316874.html</guid><description><![CDATA[     摘要: 一、拦截器定义 拦截器,在AOPåQˆAspect-Oriented ProgrammingåQ‰ä¸­ç”¨äºŽåœ¨æŸä¸ªæ–¹æ³•或字段被访问之前,˜q›è¡Œæ‹¦æˆªç„¶åŽåœ¨ä¹‹å‰æˆ–之后加入某些操作。拦截是AOP的一¿Uå®žçŽ°ç­–ç•¥ã€?在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一¿Uæœºåˆ¶å¯ä»¥ä‹É开发者可以定义在一个action执行的前后执行的代码åQŒä¹Ÿå¯ä»¥åœ¨ä¸€ä¸ªaction执行前阻止其执行。同时也æ˜?..  <a href='http://www.aygfsteel.com/jzone/articles/316874.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jzone/aggbug/316874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2010-03-29 23:17 <a href="http://www.aygfsteel.com/jzone/articles/316874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 标签功能详解 --- 无实例讲è§?http://www.aygfsteel.com/jzone/articles/316631.htmlGavin.leeGavin.leeFri, 26 Mar 2010 04:03:00 GMThttp://www.aygfsteel.com/jzone/articles/316631.htmlStruts 2 Tag Reference: http://struts.apache.org/2.x/docs/tag-reference.html

AåQ?
<s:a xhref=""></s:a>-----­‘…链接,¾cÖM¼¼äºŽhtml里的<a></a>
<s:action name=""></s:action>-----执行一个view里面的一个action
<s:actionerror/>-----如果actionçš„errors有值那么显½Cºå‡ºæ?
<s:actionmessage/>-----如果actionçš„message有值那么显½Cºå‡ºæ?
<s:append></s:append>-----æ·ÕdŠ ä¸€ä¸ªå€¼åˆ°liståQŒç±»ä¼égºŽlist.add();
<s:autocompleter></s:autocompleter>-----自动完成<s:combobox>标签的内容,˜q™ä¸ªæ˜¯ajax

BåQ?
<s:bean name=""></s:bean>-----¾cÖM¼¼äºŽstruts1.x中的åQŒJavaBeançš„å€?

CåQ?
<s:checkbox></s:checkbox>-----复选框
<s:checkboxlist list=""></s:checkboxlist>-----多选框
<s:combobox list=""></s:combobox>-----下拉�
<s:component></s:component>-----囑փ½W¦å·

DåQ?
<s:date/>-----获取日期格式
<s:datetimepicker></s:datetimepicker>-----日期输入�
<s:debug></s:debug>-----昄¡¤ºé”™è¯¯ä¿¡æ¯
<s:div></s:div>-----表示一个块åQŒç±»ä¼égºŽhtmlçš?lt;div></div>
<s:doubleselect list="" doubleName="" doubleList=""></s:doubleselect>-----双下拉框

EåQ?
<s:if test=""></s:if>
<s:elseif test=""></s:elseif>
<s:else></s:else>-----˜q?个标½{¾ä¸€èµ·ä‹É用,表示条äšg判断

FåQ?
<s:fielderror></s:fielderror>-----昄¡¤ºæ–‡äšg错误信息
<s:file></s:file>-----æ–‡äšg上传
<s:form action=""></s:form>-----获取相应form的�

GåQ?
<s:generator separator="" val=""></s:generator>----å’?lt;s:iterator>标签一起ä‹Éç”?

HåQ?
<s:head/>-----åœ?lt;head></head>里ä‹É用,表示头文件结æ?
<s:hidden></s:hidden>-----隐藏�

IåQ?
<s:i18n name=""></s:i18n>-----加蝲资源包到值堆�
<s:include value=""></s:include>-----包含一个输出,servlet或jsp™åµé¢
<s:inputtransferselect list=""></s:inputtransferselect>-----获取form的一个输�
<s:iterator></s:iterator>-----用于遍历集合

LåQ?
<s:label></s:label>-----只读的标½{?

MåQ?
<s:merge></s:merge>-----åˆåÆˆéåŽ†é›†åˆå‡ºæ¥çš„å€?

OåQ?
<s:optgroup></s:optgroup>-----获取标签¾l?
<s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----左右选择�

PåQ?
<s:param></s:param>-----为其他标½{¾æä¾›å‚æ•?
<s:password></s:password>-----密码输入�
<s:property/>-----得到'value'的属�
<s:push value=""></s:push>-----value的值push到栈ä¸?从而ä‹Éproperty标签的能够获取value的属æ€?

RåQ?
<s:radio list=""></s:radio>-----单选按�
<s:reset></s:reset>-----重置按钮

SåQ?
<s:select list=""></s:select>-----单选框
<s:set name=""></s:set>-----赋予变量一个特定范围内的�
<s:sort comparator=""></s:sort>-----通过属性给list分类
<s:submit></s:submit>-----提交按钮
<s:subset></s:subset>-----为遍历集合输出子�

TåQ?
<s:tabbedPanel id=""></s:tabbedPanel>-----表格�
<s:table></s:table>-----表格
<s:text name=""></s:text>-----I18n文本信息
<s:textarea></s:textarea>-----文本域输入框
<s:textfield></s:textfield>-----文本输入�
<s:token></s:token>-----拦截�
<s:tree></s:tree>-----æ ?
<s:treenode label=""></s:treenode>-----æ ‘çš„¾l“æž„

UåQ?
<s:updownselect list=""></s:updownselect>-----多选择�
<s:url></s:url>-----创徏url 
 
 



Gavin.lee 2010-03-26 12:03 发表评论
]]>
JAVA WEB ç”±Model 1 向Model 2的过åº?之SSHhttp://www.aygfsteel.com/jzone/articles/316488.htmlGavin.leeGavin.leeWed, 24 Mar 2010 15:35:00 GMThttp://www.aygfsteel.com/jzone/articles/316488.html原文åQšhttp://hi.baidu.com/%D0%C4%CB%E9%E5%D0%D2%A3/blog/item/e6ae7ed87146ac3232fa1c40.html
传统的java web应用½E‹åºæ˜¯é‡‡ç”¨jsp+servlet+javabean来实现的åQŒè¿™¿Uæ¨¡å¼å®žçŽîCº†æœ€åŸºæœ¬çš„MVC分层åQŒä‹É的程序结构分为几层,有负责显½Cºçš„ jsp、负责流½E‹é€»è¾‘控制的servlet、负责数据封装的javabean。但是这¿Uç»“构仍然存在问题:如jsp™åµé¢ä¸­éœ€è¦ä‹Éç”?lt;% %>½W¦å·åµŒå…¥å¾ˆå¤šçš„java代码åQŒé€ æˆ™åµé¢¾l“æž„æ··äØ•åQŒservletå’Œjavabean负责了大量的跌™{和运½Ž—工作,耦合紧密åQŒç¨‹åºå¤ç”¨åº¦ä½Žç­‰½{‰ã€?br />
于是先出çŽîCº†struts框架åQŒå®ƒæ˜¯ä¸€ä¸ªå®Œ¾ŸŽçš„MVC实现åQŒå®ƒæœ‰ä¸€ä¸ªä¸­å¤®æŽ§åˆ¶ç±»åQˆä¸€ä¸ªServletåQ‰ï¼Œé’ˆå¯¹ä¸åŒçš„业务,我们需要一个Action¾c»è´Ÿè´? ™åµé¢è·Œ™{和后台逻辑˜qç®—åQŒä¸€ä¸ªæˆ–几个jsp™åµé¢è´Ÿè´£æ•°æ®çš„输入和输出昄¡¤ºåQŒè¿˜æœ‰ä¸€ä¸ªForm¾c»è´Ÿè´£ä¼ é€’Actionå’Œjsp中间的数据。jsp中可以ä‹Éç”? struts框架提供的一¾l„æ ‡½{¾ï¼Œž®±åƒä½¿ç”¨html标签一æ ïL®€å•,但是可以完成非常复杂的逻辑。从此jsp™åµé¢ä¸­ä¸éœ€è¦å‡ºçŽîC¸€è¡?lt;%%>包围 çš„java代码了ã€?br />
可是所有的˜qç®—逻辑都放在strutsçš„Action里将使得Action¾cÕd¤ç”¨åº¦ä½Žå’Œé€»è¾‘æ··äØ•åQŒæ‰€ä»¥é€šå¸¸äºÞZ»¬ä¼šæŠŠæ•´ä¸ªweb应用½E‹åºåˆ†äؓ三层åQŒstruts负责昄¡¤ºå±‚,它调用业务层完成˜qç®—逻辑åQŒä¸šåŠ¡å±‚å†è°ƒç”¨æŒä¹…å±‚å®Œæˆæ•°æ®åº“çš„è¯Õd†™ã€?br />
使用jdbc˜qžæŽ¥æ¥è¯»å†™æ•°æ®åº“åQŒæˆ‘们最常见的就是打开数据库连接、ä‹É用复杂的sql语句˜q›è¡Œè¯Õd†™ã€å…³é—­è¿žæŽ¥ï¼ŒèŽ·å¾—çš„æ•°æ®åˆéœ€è¦è{换或ž®è£…后往外传åQŒè¿™æ˜¯ä¸€ä¸ªéžå¸¸çƒ¦ççš„˜q‡ç¨‹ã€?br />
˜q™æ—¶å‡ºçŽ°äº†hibernate框架åQŒå®ƒéœ€è¦ä½ åˆ›å¾ä¸€¾pÕdˆ—的持久化¾c»ï¼Œæ¯ä¸ª¾cȝš„属性都可以½Ž€å•的看做和一张数据库表的属性一一对应åQŒå½“然也可以实现关系数据 库的各种表äšgå…Œ™”的对应。然后我ä»?***作时åQŒåªéœ€è¦åŽ»****作这些持久化¾c»ï¼Œè€Œä¸ç”¨å†å…Ïx³¨æ•°æ®åº“表。我们不用再åŽÖM¸€è¡Œè¡Œçš„æŸ¥è¯¢æ•°æ®åº“åQŒåªéœ€è¦? ****作持久化¾cÕd°±å¯ä»¥å®Œæˆå¢žåˆ æ”ÒŽŸ¥çš„功能。ä‹É我们的èÊYä»¶å¼€å‘çœŸæ­£é¢å‘å¯¹è±¡ï¼Œè€Œä¸æ˜¯é¢å‘æØœä¹Þqš„代码。我的感受是åQŒä‹É用hibernate比jdbc方式 减少äº?0åQ…çš„¾~–程量ã€?br />
现在我们有三个层了,可是每层之间的调用是怎样的呢åQŸæ¯”如显½Cºå±‚çš„struts需要调用一个业务类åQŒå°±éœ€è¦new一个业务类出来åQŒç„¶åŽä‹É用;业务层需要调 用持久层的类åQŒä¹Ÿéœ€è¦new一个持久层¾cÕd‡ºæ¥ç”¨ã€‚通过˜q™ç§new的方式互相调用就是èÊY件开发中最¾pŸç³•设计的体现。简单的è¯ß_¼Œž®±æ˜¯è°ƒç”¨è€…依赖被调用者,它们 之间形成了强耦合åQŒå¦‚果我惛_œ¨å…¶ä»–地方复用某个¾c»ï¼Œåˆ™è¿™ä¸ªç±»ä¾èµ–çš„å…¶ä»–ç±»ä¹Ÿéœ€è¦åŒ…å«ã€‚ç¨‹åºå°±å˜å¾—å¾ˆæØœä¹±ï¼Œæ¯ä¸ª¾cÖMº’ç›æ€¾èµ–互相调用,复用度极低。如果一个类 做了修改åQŒåˆ™ä¾èµ–它的很多¾c»éƒ½ä¼šå—到牵˜qžã€?br />
为此åQŒå‡ºçްspring框架åQŒå®ƒçš„作用就是完全解耦类之间的依赖关¾p»ï¼Œä¸€ä¸ªç±»å¦‚果要依赖什么,那就是一个接口。至于如何实现这个接口,˜q™éƒ½ä¸é‡è¦äº†ã€‚只è¦? 拿到一个实çŽîCº†˜q™ä¸ªæŽ¥å£çš„ç±»åQŒå°±å¯ä»¥è½ÀL¾çš„通过xml配置文äšg把实现类注射到调用接口的那个¾c»é‡Œã€‚所有类之间的这¿Uä¾èµ–å…³¾pÕd°±å®Œå…¨é€šè¿‡é…ç½®æ–‡äšg的方式替ä»? 了。所以spring框架最核心的就是所谓的依赖注射和控制反转ã€?br />
现在的结构是åQŒstruts负责昄¡¤ºå±‚,hibernate负责持久层,spring负责中间的业务层åQŒè¿™ä¸ªç»“构是目前国内最‹¹è¡Œçš„Java Web应用½E‹åºæž¶æž„了。另外,ç”׃ºŽSpring使用的依赖注ž®„以及AOPåQˆé¢å‘方面编½E‹ï¼‰åQŒæ‰€ä»¥å®ƒçš„è¿™¿Uå†…éƒ¨æ¨¡å¼éžå¸æ€¼˜¿U€åQŒä»¥è‡³äºŽSpring自己也实çŽ? 了一个ä‹É用依赖注ž®„çš„MVC框架åQŒå«åšSpring MVCåQŒåŒæ—¶äؓ了很好的处理事物åQŒSpring集成了hibernateåQŒä‹É事物½Ž¡ç†ä»ŽHibernate的持久层提升åˆîCº†ä¸šåŠ¡å±‚ï¼Œä½¿ç”¨æ›´åŠ æ–¹ä¾¿å’Œå¼ºå¤§ã€?/span>

Gavin.lee 2010-03-24 23:35 发表评论
]]>
Struts1 初步认识http://www.aygfsteel.com/jzone/articles/290601.htmlGavin.leeGavin.leeMon, 10 Aug 2009 16:11:00 GMThttp://www.aygfsteel.com/jzone/articles/290601.html1.ä¸ÞZ»€ä¹ˆè¦ä½¿ç”¨struts
a.struts建立在MVC˜q™ç§å…¬è®¤çš„好的模式上的,Struts在M,V,C上都有涉及,但它主要提供一个好的控制器和一套定制的标签库上åQŒä¹Ÿž®±æ˜¯è¯´å®ƒçš„着力点在C,V上,有MVC的一¾pÕdˆ—优点åQŒå¦‚åQšç»“构层‹Æ¡åˆ†æ˜Žï¼Œé«˜å¯é‡ç”¨æ€§ï¼Œå¢žåŠ äº†ç¨‹åºçš„å¥å£®æ€§å‘µå¯äŽ×¾~©æ€§ï¼Œä¾¿äºŽå¼€å‘与设计分工åQŒæä¾›é›†ä¸­ç»Ÿä¸€çš„æƒé™æŽ§åˆÓž¼Œæ ¡éªŒåQŒå›½é™…化åQŒæ—¥å¿—ç­‰½{‰ï¼›
b.struts它是开源项目,得到了包括它的发明者Craig R.McClanahan在内的一些程序大师和高手持箋而细心的呉|ФåQŒåƈ且经受了实战的检验,使其功能­‘Šæ¥­‘Šå¼ºå¤§ï¼Œä½“系也日益完善;
c.struts框架能和其他技术很好的融合åQŒå¦‚与SpringåQŒHibernate½{‰æ¡†æž¶çš„æ•´åˆåQŒå¤§å¤§åŠ å¿«äº†å¼€å‘é€Ÿåº¦

2.Framework的概å¿?br /> 框架是äh们用于解决相同或者相似类型问题的æ–ÒŽ¡ˆ
特点åQšå¯é‡ç”¨æ€§ï¼Œå¯æ‰©å±•性,可收¾~©æ€§ã€‚基于请求响应(request-responseåQ‰æ¨¡å¼çš„应用Framework的逻辑¾l“æž„
控制器:Controller
业务逻辑层:Business Logic
数据逻辑层:Data Logic

3.Struts的概念和体系¾l“æž„
Struts是Apache¾l„织的一个开源项目,主要是采用Servletå’ŒJSP技术来实现çš?br /> Struts是一个基于Sun JavaEEòq›_°çš„MVC框架åQŒå®ƒé‡‡ç”¨MVC模式åQŒå°†MVC模式分离昄¡¤ºé€»è¾‘和业务逻辑的能力,发挥的淋漓尽è‡?br /> (Struts is a flexible control layer based on standard technologies like Java Servlets,JavaBeans,ResourceBundles,and XML,as well as various Jakarta Commons packages,like BeanUtils and Chain of Responsibility.The frameword helps you create an extensible developmnt environment for your application,based on published standards and proven design patterns)

4.Struts的实跉|­¥éª?br /> 步骤一åQšæ­å»ºçŽ¯å¢?br />  a.导入jar包,使用其中的类
 b.建立一个配¾|®æ–‡ä»Óž¼Œstruts=config.xml
        æ–¹ä¾¿struts用户使用
        ä¸€èˆ¬åœ¨WEB=INFä¸?br />  c.修改web.xml
         æ³¨å†Œstruts中心控制å™?--ActionServlet

<serlet>
    
<servlet-name></servlet-name>
    
<servlet-class></servlet-class>
    
<init-param> <!-- åˆå§‹åŒ–加载配¾|®æ–‡ä»?nbsp;-->
        
<param-name>config</param-name>
        
<param-value>/WEB-INF/struts-config.xml</param-value>
    
</init-param>
    
<load-on-startup>0</load-on-startup> <!-- web容器启动ž®±åŠ è½½è¯¥servlet -->
</serlet>

<servlet-mapping> <!-- è¯¥servlet对外调用的映ž®?nbsp;-->
    
<servlet-name></servlet-name>
    
<url-pattern></url-pattern>
</servlet-mapping>

 
步骤二:建立ActionForm
步骤三:建立Action
 å»ºç«‹ä¸€ä¸ªç±»åQŒç‘ô承ActionåQŒè¦†ç›–executeæ–ÒŽ³•
 æ³¨å†ŒåQŒä¿®æ”šw…¾|®æ–‡ä»¶struts-config.xml
  pathåQšæŒ‡æ˜Žè°ƒç”¨è€…ï¼ˆjspåQ‰èƒ½é€šè¿‡ä¸­å¿ƒæŽ§åˆ¶å™¨ActionServlet扑ֈ°è¯¥Action
  typeåQšæŒ‡æ˜Žè¯¥action¾cÕd…¨å?br />   nameåQšè¯¥action引用的form的名¿U?/p>

步骤四:™åµé¢è®‰K—®


5.Struts的工作原ç?br /> 6.Struts的组ä»?br /> 7.Struts的配¾|®æ–‡ä»¶ç®€ä»?br /> 8.Struts标记åº?br /> 9.异常处理框架
10.校验框架
11.高çñ”ç‰ÒŽ€?br /> 12.Struts优缺ç‚?br /> 优点åQ?br />   Strutsè·ŸTomcat、Turbine½{‰è¯¸å¤šApache™å¹ç›®ä¸€æ øP¼Œæ˜¯å¼€æºèÊYä»Óž¼Œ˜q™æ˜¯å®ƒçš„一大优炏V€‚ä‹É开发者能更深入的了解其内部实现机制。除此之外,Struts的优点主要集中体现在两个

æ–šw¢åQšTaglib和页面导航。Taglib是Struts的标记库åQŒçµ‹zÕdŠ¨ç”¨ï¼Œèƒ½å¤§å¤§æé«˜å¼€å‘æ•ˆçŽ‡ã€‚å¦å¤–ï¼Œž®Þq›®å‰å›½å†…çš„JSP开发者而言åQŒé™¤äº†ä‹É用JSP自带的常用标记外åQŒå¾ˆž®‘开发自å·Þqš„æ ?/p>

讎ͼŒæˆ–许Struts是一个很好的èµïL‚¹ã€?br />   关于™åµé¢å¯ÆDˆªåQŒæˆ‘们认为那ž®†æ˜¯ä»ŠåŽçš„一个发展方向,事实上,˜q™æ ·åšï¼Œä½¿ç³»¾lŸçš„脉络更加清晰。通过一个配¾|®æ–‡ä»Óž¼Œå›_¯æŠŠæ¡æ•´ä¸ª¾pȝ»Ÿå„部分之间的联系åQŒè¿™å¯¹äºŽåŽæœŸçš„ç»´

护有着莫大的好处。尤其是当另一批开发者接手这个项目时åQŒè¿™¿Uä¼˜åŠ¿ä½“çŽ°å¾—æ›´åŠ æ˜Žæ˜¾ã€?/p>

¾~ºç‚¹åQ?br />   Taglib是Struts的一大优势,但对于初学者而言åQŒå´éœ€è¦ä¸€ä¸ªæŒ¾l­å­¦ä¹ çš„˜q‡ç¨‹åQŒç”šè‡Œ™¿˜ä¼šæ‰“乱我们网™å늼–写的习惯åQŒä½†æ˜¯ï¼Œå½“我们习惯了它时åQŒæˆ‘们会觉得它真的很‹‚’ã€?/p>

Strutsž®†MVCçš„Controllerä¸€åˆ†äØ“ä¸‰ï¼Œåœ¨èŽ·å¾—ç»“æž„æ›´åŠ æ¸…æ™°çš„åŒæ—¶åQŒä¹Ÿå¢žåŠ äº†ç³»¾lŸçš„复杂度。毫无疑问,要理è§?Struts 必须接受一定的培训。随着变化的不断加入,˜q™æœ‰æ—¶ä¼šä»¤äh

很沮丧ã€?br />   Struts从äñ”生到现在˜q˜ä¸˜q?-4òq´æ—¶é—ß_¼Œž®±å·²é€æ­¥­‘Šæ¥­‘Šå¤š˜qç”¨äºŽå•†ä¸šèÊY件。虽然它现在˜q˜æœ‰ä¸å°‘¾~ºç‚¹åQŒä½†å®ƒæ˜¯ä¸€¿Uéžå¸æ€¼˜¿U€çš„J2EE MVC实现方式åQŒå¦‚果我们的¾pȝ»Ÿå‡†å¤‡é‡‡ç”¨

J2EE MVCæž¶æž„åQŒé‚£ä¹ˆï¼Œä¸å¦¨è€ƒè™‘一下Strutsã€?br />   Struts 是一¿UåŸºäº?Web çš?MVC 解决æ–ÒŽ¡ˆåQŒæ‰€ä»¥å¿…™åȝ”¨ HTML、JSP æ–‡äšgå’?servlet 来实现它åQŒStruts 需要支æŒ?JSP 1.1 å’?Servlet 2.2 规范çš?servlet 容器。学习、理

解和掌握Struts是我们每个基于J2EE软äšg开发äh员一门必修的评¡¨‹åQŒä¹Ÿæ˜¯æˆ‘们对企业J2EE技术应用的˜q›ä¸€æ­¥æ·±åŒ–ã€?/p>

/************************************************************************************************/

Struts的基本组件包

org.apache.struts.action
 基本上,控制整个struts framework的运行的核心¾c…R€ç»„仉™ƒ½åœ¨è¿™ä¸ªåŒ…中,比如我们上面提到的控制器ActionServlet。已¾lAction,ActionForm,ActionMapping½{‰ç­‰ã€‚struts1.1æ¯?.0多了 DynaActionForm ¾c…R€‚增加了动态扩展生成FormBean功能

org.apache.struts.actions
 ˜q™ä¸ªåŒ…是主要作用是提供客æˆïLš„httpè¯äh±‚和业务逻辑处理之间的特定适配器è{换功能,è€?.0版本中的部分动态增删FromBean的类åQŒä¹Ÿåœ¨struts1.1中被Action包的DynaActionForm¾l„äšg所取代

org.apache.struts.config
 提供寚w…¾|®æ–‡ä»¶struts-config.xml元素的映ž®„。这也是sturts1.1中新增的功能

org.apache.struts.util
 Strtutsä¸ÞZº†æ›´å¥½æ”¯æŒweb application的应用,体统了一个些常用服务的支持,比如Connection Poolå’ŒMessage Sourceã€?br />
org.apache.struts.taglib
 ˜q™ä¸æ˜¯ä¸€ä¸ªåŒ…åQŒè€Œæ˜¯æ˜¯ä¸€ä¸ªå®¢æˆäh ‡½{„¡±»çš„集合。下面包括Bean TagsåQŒHTML TagsåQŒLogic TagsåQŒNested TagsåQŒTemplate Tags˜q™å‡ ä¸ªç”¨äºŽæž„建用æˆïL•Œé¢çš„æ ‡ç­¾¾c…R€?

org.apache.struts.validator
 Struts1.1 framework中增加了validator frameworkåQŒç”¨äºŽåŠ¨æ€çš„é…ç½®from表单的验证ã€?/p>

/************************************************************************************************/
核心Struts ¾cÕd’ŒMVC 的对åº?/p>

¾c?nbsp;                                                                          æè¿°
ActionForward                                           ç”¨æˆ·æŒ‡å‘或者视å›ùN€‰æ‹©
ActionForm                                                çŠ¶æ€æ”¹å˜çš„æ•°æ®
ActionMapping                                           çŠ¶æ€æ”¹å˜äº‹ä»?
ActionServlet                                              æŽ§åˆ¶å™¨ï¼ŒæŽ¥å—用户è¯äh±‚和状态改变,以及发出视图选择
Action                                                        æŽ§åˆ¶å™¨çš„一部分åQŒäºŽæ¨¡åž‹äº¤äº’åQŒæ‰§è¡ŒçŠ¶æ€æ”¹å˜æˆ–çŠ¶æ€æŸ¥è¯¢ï¼Œ
                                                                ä»¥åŠå‘Šè¯‰ActionServlet 下一个选择的视å›?


/************************************************************************************************/
Struts 使用一些配¾|®æ–‡ä»¶å’Œè§†å›¾åŠ©æ‰‹åQˆview helpersåQ‰æ¥æ²Ÿé€šæŽ§åˆ¶å™¨å’Œæ¨¡åž?br /> ApplicationResources.properties                                   å­˜å‚¨æœ¬åœ°åŒ–信息和标签åQŒä»¥ä½¿åº”用可以国际化
struts-config.xml                                                            å­˜å‚¨æŽ§åˆ¶å™¨å¯¹è±¡çš„¾~ºçœé…ç½®åQŒåŒ…括模型支持的用户指向åQŒçŠ¶æ€æ”¹å˜ï¼ŒçŠ¶æ€æŸ¥è¯?

标记库描˜q°ç¬¦                                                           ç›®çš„
struts-html.tld                                               æ‰©å±•HTML Formçš„JSP标记
struts-bean.tld                                              æ‰©å±•处理JavaBeançš„JSP标记
struts-logic.tld                                              æ‰©å±•‹¹‹è¯•属性值的JSP标记

/************************************************************************************************/
控制器组件的配置框架中的控制器组件是有org.apache.struts.action.ActionServlet¾cÕd®žçŽ°çš„åQŒè¿™ä¸ªç±»æ˜¯javax.servlet.http.HttpServlet¾cÈš„æ‰©å±•ã€?br /> ActionServlet配置åQšæˆ‘ä»¬éœ€è¦åœ¨web.xml中声明ActionServletåQŒåƈ且将它配¾|®æˆå¯åŠ¨æ—¶è¿›è¡ŒåŠ è½½ã€‚ä»¥ä¸‹äØ“å¯ä»¥é…ç½®çš„åˆå§‹åŒ–å‚æ•°åQ?br /> 参数                                                         é»˜è®¤å€?nbsp;                                                                       æè¿°
application                                                    Null                                                                åº”用½E‹åºçš„资源集合的¾c?
bufferSize                                                     4096                                                                æ–‡äšg上传的缓冲区大小
config                                            /WEB-INF/struts-config.xml                                        é…ç½®æ–‡äšg的位¾|®å’Œåç§°
content                                                       Text/html                                                                     é»˜è®¤çš„内容类åž?
debug                                                              0                                                                          ½E‹åºè°ƒè¯•çš„çñ”åˆ?
detail                                                               0                                                                         ½E‹åºè°ƒè¯•¾l†èŠ‚çš„çñ”åˆ?
factory                                                         Null                                                 æ¶ˆæ¯èµ„源工厂åQŒç”¨äºŽå›½é™…化中解释消息资æº?
formBean                            org.apache.struts.action.ActionFormBean                         ž®è£…ActionForm bean信息的类的名¿U?
forward                              Org.apache.struts.action.ActionForward                          ž®è£…ActionForward对象信息的类的名¿U?
locale                                                          True                                                        ä¸ºtrue,ž®†åœ¨ç”¨æˆ·ä¼šè¯ä¸­å­˜å‚¨ä¸€ä¸ªæœ¬åœ°å¯¹è±?
mapping                            Org.apache.struts.action.ActionForward                              ž®è£…ActionMapping信息的类的名¿U?
maxFileSize                                                250M                                                                 ä¸Šä¼ æ–‡äšg的最大尺å¯?
multipartClass                   Org.apache.struts.action.ActionForward                                å¤„理多部分请求的¾cȝš„名称
noCache                                                      False                                                      HTTP标头是否要设¾|®äØ“¼›æ­¢¾~“寸
Null                                                             True                                                       è®„¡½®ä¸ºtrueåQŒå¯¹äºŽæ— æ•ˆçš„信息关键字将˜q”回null
tempDir                           ä½œäؓ一个servlet参数提供¾l™ç¨‹åºçš„工作目录                        å¤„理下蝲文äšg是ä‹É用的临时工作目录
validate                                                        True                                                              æ˜¯å¦ä½¿ç”¨æ–°æ ¼å¼çš„配置文äšg
vallidating                                                     True                                                              æ˜¯å¦å¯šw…¾|®æ–‡ä»¶è¿›è¡Œæœ‰æ•ˆæ€§åˆ†æž?


 



Gavin.lee 2009-08-11 00:11 发表评论
]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ƽÀÖÏØ| ÁÙ°²ÊÐ| ÌÁ¹ÁÇø| Â³É½ÏØ| ÉÜÐËÊÐ| Î÷²Ø| ÐÂç­ÏØ| ¼ÎºÌÏØ| ½­É½ÊÐ| ÉÛÑôÏØ| ãò¶¨ÏØ| ÍþÄþ| ¸§ÄþÏØ| Âó¸ÇÌáÏØ| ƽ¹ûÏØ| ËçÑôÏØ| ×õË®ÏØ| ¶ÑÁúµÂÇìÏØ| ¹ÌÊ¼ÏØ| ÏæÌ¶ÊÐ| º£³ÇÊÐ| ÉÛÎäÊÐ| °¢°ÓÏØ| ÄáÄ¾ÏØ| ³£ÖÝÊÐ| ÑôÇúÏØ| ×ÊÔ´ÏØ| ¸§Ô¶ÏØ| ºÏ×÷ÊÐ| ºÏ½­ÏØ| ÇàÌïÏØ| µÂÇìÏØ| ²ÊƱ| ÐÂÒÊÊÐ| ¾«ºÓÏØ| ¾®ÚêÏØ| ¸·ÄÏÏØ| äØÌ¶ÏØ| ¸ÞÀ¼ÏØ| ÍÐÀïÏØ| °¢¿ËËÕÊÐ|