??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品精华液网站,色综合老司机第九色激情,久久久久国产精品一区三寸http://www.aygfsteel.com/zlsunnan/category/5657.html世界L反反覆覆错错落落地飘?来不及叹?生活不是q_^淡E从从容容的东?不能攑ּzh-cnTue, 05 Jun 2007 06:28:24 GMTTue, 05 Jun 2007 06:28:24 GMT60[struts]常见异常信息和解x?/title><link>http://www.aygfsteel.com/zlsunnan/archive/2007/06/04/121776.html</link><dc:creator>☆蓝色梦想☆</dc:creator><author>☆蓝色梦想☆</author><pubDate>Mon, 04 Jun 2007 02:58:00 GMT</pubDate><guid>http://www.aygfsteel.com/zlsunnan/archive/2007/06/04/121776.html</guid><wfw:comment>http://www.aygfsteel.com/zlsunnan/comments/121776.html</wfw:comment><comments>http://www.aygfsteel.com/zlsunnan/archive/2007/06/04/121776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zlsunnan/comments/commentRss/121776.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zlsunnan/services/trackbacks/121776.html</trackback:ping><description><![CDATA[<div id="wmqeeuq" class="postText"> <p>以下所说的struts-config.xml和ApplicationResources.properties{文件名是缺省时使用的,如果你用了多模块,或指定了不同的资源文件名Uͼq些名字要做相应的修攏V?/p> <p><strong>1?#8220;No bean found under attribute key XXX”<br></strong>在struts-config.xml里定义了一个ActionFormQ但type属性指定的cM存在Qtype属性的值应该是Formcȝ全名。或者是Q在Action的定义中Qname或attribute属性指定的ActionForm不存在?br></p> <p><strong>2?#8220;Cannot find bean XXX in any scope”</strong><br>在Action 里一般会request.setAttribute()一些对象,然后在{向的jsp文g里(用tag或request.getAttribute()? 法)得到q些对象q显C出来。这个异常是说jsp要得C个对象,但前面的Action里ƈ没有对象设|到requestQ也可以是session? servletContextQ里?br>可能是名字错了,h查jsp里的tag的一般是name属性,或getAttribute()Ҏ(gu)的参数|或者是Action逻辑有问题没有执行setAttribute()Ҏ(gu)先转向了?br>q? 有另外一个可能,Ua是jsp文g的问题,例如<logic:iterate>会指定一个id|然后在@环里<bean: write>使用q个g为name的|如果q两个g同,也会出现此异常。(都是一个道理,request里没有对应的对象。)<br></p> <p><strong>3?#8220;Missing message for key "XXX"”</strong><br>~少所需的资源,查ApplicationResources.properties文g里是否有jsp文g里需要的资源Q例如:</p> <div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 98%;"> <div><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #000000;"><</span><span style="color: #000000;">bean:message key</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">msg.name.prompt</span><span style="color: #000000;">"</span><span style="color: #000000;">/></span></div> </div> <p>q? 行代码会找msg.name.prompt资源Q如果AppliationResources.properties里没有这个资源就会出现本异常。在? 用多模块Ӟ要注意在模块的struts-config-xxx.xml里指定要使用的资源文件名Uͼ否则当然什么资源也找不刎ͼq也是一个很Ҏ(gu)犯的? 误?/p> <p><strong>4?#8220;No getter method for property XXX of bean teacher”</strong><br>q条异常信息说得很明白,jsp里要取一个bean的属性出来,但这个beanq没有这个属性。你应该查jsp中某个标{property属性的倹{例如下面代码中的cade应该改ؓcode才对Q?/p> <div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 98%;"> <div><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #000000;"><</span><span style="color: #000000;">bean:write name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">teacher</span><span style="color: #000000;">"</span><span style="color: #000000;"> property</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">cade</span><span style="color: #000000;">"</span><span style="color: #000000;"> filter</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">true</span><span style="color: #000000;">"</span><span style="color: #000000;">/></span></div> </div> <br> <p><strong>5?#8220;Cannot find ActionMappings or ActionFormBeans collection”<br></strong>一般是因ؓstruts-config.xml里面?lt;action写错了。xml用手工写很容易出?#8230;… <br><strong>6?#8220;Cannot retrieve mapping for action XXX”<br></strong>?jsp?lt;form>标签里指定action='/XXX'Q但q个Actionq未在struts-config.xml里设|过?/p> <p><strong>7、HTTP Status 404 - /xxx/xxx.jsp<br></strong>Forward的path属性指向的jsp面不存在,h查\径和模块Q对于同一模块中的Action转向Qpath中不应包含模块名Q模块间转向Q记住用contextRelative="true"?/p> <p><strong>8、没有Q何异怿息,昄I白面</strong><br>可能是Action里用的forward与struts-config.xml里定义的forward名称不匹配?br></p> <p><strong>9?#8220;The element type "XXX" must be terminated by the matching end-tag "XXX".”<br></strong>q个是struts-config.xml文g的格式错误,仔细查它是否是良构的xml文gQ关于xml文g的格式这里就不赘qC?/p> <p><strong>10?#8220;Servlet.init() for servlet action threw exception”</strong><br>一般出现这U异常在后面会显CZ个关于ActionServlet的异常堆栈信息,其中指出了异常具体出现在代码的哪一行。我曄遇到的一ơ提C如下:</p> <div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 98%;"> <div><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #000000;">java.lang.NullPointerException<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">    at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:</span><span style="color: #000000;">1003</span><span style="color: #000000;">)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">    at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:</span><span style="color: #000000;">955</span><span style="color: #000000;">)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><img src="http://www.cnblogs.com/Images/dot.gif"></span></div> </div> <p><br>决问题,先下载struts的源码包Q然后在ActionServlet.java的第1003行插入断点,q对各变量进行监视。很丢hQ我竟然把struts-config.xml文g弄丢了,因此出现了上面的异常Q应该是和CVS同步时不心删除的?/p> <p><strong>11?#8220;Resources not defined for Validator”</strong><br>q个是利用Validator插g做验证时可能出现的异常,q时你要查validation.xml文gQ看里面使用的资源是否确实有定义Qform的名U是否正,{等?/p> <p>上面q些是我在用Struts做项目时遇到q的问题Q其中一些曾困绕我不时_其实大部分都是自׃l心造成的。希望这文章能对你的开发有所帮助QƈƢ迎l箋补充?/p> </div><img src ="http://www.aygfsteel.com/zlsunnan/aggbug/121776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zlsunnan/" target="_blank">☆蓝色梦想☆</a> 2007-06-04 10:58 <a href="http://www.aygfsteel.com/zlsunnan/archive/2007/06/04/121776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.0pdhttp://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101694.html☆蓝色梦想☆☆蓝色梦想☆Sat, 03 Mar 2007 17:03:00 GMThttp://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101694.htmlhttp://www.aygfsteel.com/zlsunnan/comments/101694.htmlhttp://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101694.html#Feedback0http://www.aygfsteel.com/zlsunnan/comments/commentRss/101694.htmlhttp://www.aygfsteel.com/zlsunnan/services/trackbacks/101694.htmlStruts 2.0pd

☆蓝色梦想☆ 2007-03-04 01:03 发表评论
]]>
Struts 应用转移?Struts 2 ( ?) http://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101693.html☆蓝色梦想☆☆蓝色梦想☆Sat, 03 Mar 2007 17:01:00 GMThttp://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101693.htmlhttp://www.aygfsteel.com/zlsunnan/comments/101693.htmlhttp://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101693.html#Feedback0http://www.aygfsteel.com/zlsunnan/comments/commentRss/101693.htmlhttp://www.aygfsteel.com/zlsunnan/services/trackbacks/101693.html阅读全文

☆蓝色梦想☆ 2007-03-04 01:01 发表评论
]]>
Struts 应用转移?Struts 2 (一)http://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101690.html☆蓝色梦想☆☆蓝色梦想☆Sat, 03 Mar 2007 16:51:00 GMThttp://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101690.htmlhttp://www.aygfsteel.com/zlsunnan/comments/101690.htmlhttp://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101690.html#Feedback0http://www.aygfsteel.com/zlsunnan/comments/commentRss/101690.htmlhttp://www.aygfsteel.com/zlsunnan/services/trackbacks/101690.htmlSpringSide团队   转蝲h明出处?br />
     有很多h都很熟?zhn)?Struts, 无论是从目中直接获得的实战l验q是从书中了解到的。我们这一pd文章Q将通过一个由 Stuts 转移?Struts2 单的例子向大家展现Struts2的所有特征?br />    在我们开始这个例子之前,你需要去知道一?Struts2的背景知识?在第一部分的文章中Q我们将介绍Struts2与Struts的核心框架的不同点,以助于更好地了解其他斚w的整合。第二部分中Q我们将深入探讨 actions 的差? action相关的框架特征,和action配置。在最后一部分中,我们会讲述 user interfaceQ我们也会讲到其架构QUI构gQthemes 和标{?q有如何Z的应用加上新的外观?br />    我们q不打算谈及q移q程的所有细节方面,我们只是从出发点开始介lStruts2 的概念和现在可用的所有特征。但拥有q些知识Q你在以后Struts2的应用中无往而不利?br />   
Struts的历?/font>
    Struts的第一个版?是在 2001q?月䆾发布。它提供了一个Web应用的解x案,如何?JSPs ?servlets 共存L供清晰的分离视图和业务和应用逻辑的架构。在Struts之前Q最通常的做法是在JSP中加入业务和应用逻辑Q或者在servlets中生成视图?br />    自从W一个版本的发布Q?Struts 实际上已成ؓ业界公认的Web应用标准。但随着旉的推U,W(xu)eb应用框架l常变化的需求,产生了几个下一?Struts的解x案。其中两个可选方案是Shale ?Struts Ti?Shale 是一个基于构建的框架Qƈ在最q成?Apache 中的重要目。?Struts Ti 则是l箋坚持 MVC模式的基上改q,l箋Struts的成功经验?br />    WebWork目是在2002q?月发布的Q它对Struts式框架进行了革命性改q,引进了不新的思想Q概念和功能Q但和原Struts代码q不兼容。WebWork是一个成熟的框架Q经q了好几ơ重大的改进与发布。在2005q?2月,W(xu)ebWork与Struts Ti军_合拼Q?再此同时Q?Struts Ti 改名?Struts Action Framework 2.0,成ؓStruts真正的下一代?br />
h如何q作
    在我们开始详l探讨如何{UStruts到Struts2之前Q让我们来看看整个请求流E在新架构中是如何运作的。你会注意到在整个请求的生命周期Q仍是以controller作主体,而且所有的概念q都是你以前所熟?zhn)的?如Q?br />
  • 通过URLh的参数来调用Actions来把数据传给server.
  • 所有的Servlet objects (request, response, session,之类.) 仍然可以在Action中获?/li>
    下图展示了整个请求的概要q程:


    整个hq程可以分ؓ六步?
    1. 一个请求生ƈl由框架处理 - 框架Ҏ(gu)h匚w相应的配|,如用哪些拦截器Qaction cdl果?
    2. h通过一pd的拦截器 - 拦截器,和拦截器l经配置后,能处理不同等U的hQ它们ؓh提供了各U预处理Q切面处理。这和Struts的?Jakarta Commons Chain 构g?RequestProcessorcd怼?
    3. 调用 Action - 产生一个新的action对象实例Qƈ提供h所调用的处理逻辑的方法。Struts2 可以在配|a(chn)ction时ؓh分配其指定的Ҏ(gu)。我们在W二部文章中对q步骤进行进一步讨?
    4. 调用产生的结?- 获取通过action的方法处理后q回来的l果Q匹配其result classq调用生的实例。有U情冉|在UI模板ȝ成HTML时才d理这些结果。如果在q种情况下,在Struts2 模板中的tags能直接返回到 action 中,取结果来呈现界面。 
    5. h再次l过一pd的拦截器处理后返?/b> - h反顺序通过与原来进入时的拦截器? 当然Q你也可以配|在q个q程中减或增加拦截器处理.
    6. hq回到用?- 最后一步是?control q回到servlet。通常是生成HTMLq回到user, 但你也可以指定返回的HTTP头或HTTP重定向?
      你应该已注意刎ͼStruts2与Struts的差别。最明显的就是Struts2是pull-MVC 架构Q就是可以直接从Action中获取所需要的数据Q而不是像Struts那样必须?beans 存到page, request,或者session中才能获取。这个我们将在下一章中详细提及?br />
      配置框架
      首先最重要的是Q让框架能通过web.xml在servlet containers里运行?br />下面q个是大家都熟(zhn)的 Struts?web.xml里的配置Ҏ(gu)

         
      <servlet>
              <servlet-name>action</servlet-name>
              <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
              <init-param>
                  <param-name>config</param-name>
                  <param-value>/WEB-INF/struts-config.xml</param-value>
              </init-param>
              <load-on-startup>2</load-on-startup>
          </servlet>

          <servlet-mapping>
              <servlet-name>action</servlet-name>
              <url-pattern>*.do</url-pattern>
          </servlet-mapping>

      ?Struts2 中,q个有少许改变,最明显的是dispatcher 由servlet转ؓservlet filter, 光|和servlet一L(fng)单,如下Q?br />
         
       <filter>
               <filter-name>webwork</filter-name>
                 <filter-class>
                  org.apache.struts.action2.dispatcher.FilterDispatcher
         </filter-class>
          </filter>

          <filter-mapping>
         <filter-name>webwork</filter-name>
         <url-pattern>/*</url-pattern>
          </filter-mapping>

      和servlet配置一Pfilter配置定义了名U?供关?和filter的类。filter mapping让URI匚w成功的的h调用该filter。默认情况下Q扩展名?.action"?br />q个是在default.properties文g里的"struts.action.extension" 属性定义的?br />
      工具?/b>:  "default.properties"是配|选项定义文g。通过在classpath中包含一个叫"struts.properties"的文Ӟq设|不同的属性|你可以覆盖这个默认的配置Q实现自q配置?/blockquote>对于Struts, servlet配置提供了初始化tag的参数和使用的文Ӟ而Struts2没有q样的配|参敎ͼ取而代之的是在classpath下的默认配置文g"struts.xml"?br />
      工具?提示: Struts actions(扩展?.do")QStruts2 actions(扩展?.action"),所以Struts和Struts2可以在一个系l中共存。所以最好是保持原先的系l,在新功能的开发上用Struts2, 如果旉和资源允许的情况下再逐步q移。另一U方法是只是把Struts2的扩展名改ؓ".do",可重用JSPs.
      分析Actions
      在上面介l的hq作程中,我们谈及了一些Struts和Struts2的不同点。现在我们将较深入地探讨q两个框架中actionl构的具体差别?br />让我们来回顾一?Struts ?action l构, 主要的Ş式如下:

      public class MyAction extends Action {
          public ActionForward execute(ActionMapping mapping,
                                       ActionForm form,
                                       HttpServletRequest request,
                                       HttpServletResponse response)
                  throws Exception {
              // do the work
              return (mapping.findForward("success"));
          }
      }

      当实C个Struts action? 你需要注意一下问题:
      1. 所有的action 都必ȝ承于base Action c?
      2. 所有的action都必LU程安全?因ؓaction是单例的,singleton?
      3. 因ؓ所有的action都必LU程安全?所以所有的对象都不能是cd? 都必MҎ(gu)参数的Ş式传倹{?
      4. 调用action的方法必d名ؓ "execute" ( 在Struts中的  DispatchAction cd像可以用其它Ҏ(gu)L行同一个action Q但实际上在框架中调用的仍然?"execute" Ҏ(gu)?.
      5. ActionForward 的结果是通过ActionMapping cM的方法来产生?通常?findForward"Ҏ(gu).
        相比较之下, Struts2的action 提供了很多简单的实现。下面就是个例子

        public class MyAction {
           public String execute() throws Exception {
                // do the work
                return "success";
           }
        }

        首先你会注意到的是,Struts2中的action不再l承于Q何类或需要实CQ何接口。实际上Q它q远不只q些。按照惯例,只有"execute"Ҏ(gu)能调用action, 但在Struts2中ƈ非必要,M声明为public String methodName() Ҏ(gu)都能通过配置来调用action.
        另外Q你会注意到q回g再是"ActionForward ",而是String, 如果你需喜欢String的Ş式,那在Action接口里有个帮助方法可以提供简单的l果帔RQ如"success", "none", "error", "input" ?"login"?br />最后,和Struts最大的革命性的不同? 调用action不再是带参数的。那你如何在获得你所需要的值呢Q答案是"inversion of control" ?"dependency injection", 反{控制(想了解更多可以看Martin Fowler的文?http://www.martinfowler.com/articles/injection.html)?br />Z更好C解反转控Ӟ让我们来看看一个例子,如何在action处理q程中可以访问到HttpServerRequest 。在我们的例子中Q我们用ServletRequestAware 接口Q这个接口包含了相应属性的setter,如下

        public interface ServletRequestAware {
            public void setServletRequest(HttpServletRequest request);
        }

        当我们承这个接口时Q我们需要通过setter为我们的HttpServerRequest 属性变量赋|

        public class MyAction implements ServletRequestAware {
           private HttpServletRequest request;
           public void setServletRequest(HttpServletRequest request) {
                this.request = request;
           }
           public String execute() throws Exception {
                // do the work using the request
                return Action.SUCCESS;
           }
        }

        看v来现在这些属性是cȝ别的Qƈ不是U程安全的,但是在Struts2里ƈ没有问题Q因为每个请求过来的时候都会生一个新的action对象实例Q它q没有和其他h׃n一个对象,所以不需要考虑U程安全问题?br />
        现在我们q有最后一步,是把action兌?b>ServletConfigInterceptor
        拦截器。这个拦截器l承?b>ServletRequestAware
        接口Qƈ提供了把HttpServletRequest 注入到action中的功能。但是你现在不用担心如何配置q些Q我们将在下一文章中具体讲述。最重要的是我们明白了拦截器和接口共同ؓaction提供了反转控制的功能?br />q个设计的好处是能让action完全和框架解耦。action仅仅是一个被框架使用的简单的POJO。这对于单元试但来极大的好处, 你能方便的ؓStruts action实现 StrutsTestCase 或  MockStrutsTestCase 单元试?br />
        ȝ
        By到现在ؓ止,你应该已l了解了Struts2的整个请求流E,q有高层的框架概念, 你也应该能自己动手配|Struts2的actionQ和讲出Struts和Struts2的差别了?br />在下文章中Q我们将会介l一个详l的Struts应用向Struts2q移的例子,同时我们也会介绍q移中相关的知识Q会讲述如何l合使用JSTL, JSP ?Struts2Q进一步讲qStruts和Struts2的action的差别,Struts2的配|和其他框架元素Q和谈到更多的其他相x架的特征?br />(?a target="_blank">http://www.infoq.com/, cac 译)


        ]]>Apache Struts 2 GA http://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101689.html☆蓝色梦想☆☆蓝色梦想☆Sat, 03 Mar 2007 16:49:00 GMThttp://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101689.htmlhttp://www.aygfsteel.com/zlsunnan/comments/101689.htmlhttp://www.aygfsteel.com/zlsunnan/archive/2007/03/04/101689.html#Feedback0http://www.aygfsteel.com/zlsunnan/comments/commentRss/101689.htmlhttp://www.aygfsteel.com/zlsunnan/services/trackbacks/101689.html
        q是Apache Struts 2 首次发行E_的版? GA意味着 General Availability , 也就是官方开始推荐广泛用了.

        Struts2 GA版本的发? 意味着核心开发力量将全部转移到Struts2, 对Struts1的支持将会E?

        下面列出了一些Struts1和Struts2的区别和Ҏ(gu):

        Action c?
        ?Struts1要求Actioncȝ承一个抽象基cRStruts1的一个普遍问题是使用抽象cȝE而不是接口?
        ?Struts 2 Actioncd以实C个Action接口Q也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类d?常用的接口。Action接口不是必须的,M有execute标识的POJO对象都可以用作Struts2的Action对象?

        U程模式:
        ?Struts1 Action是单例模式ƈ且必LU程安全的,因ؓ仅有Action的一个实例来处理所有的h。单例策略限制了Struts1 Action能作的事Qƈ且要在开发时特别心。Action资源必须是线E安全的或同步的?
        ?Struts2 Action对象为每一个请求生一个实例,因此没有U程安全问题。(实际上,servlet容器l每个请求生许多可丢弃的对象,q且不会D性能和垃圑֛攉题)

        Servlet 依赖:
        ?Struts1 Action 依赖于Servlet API ,因ؓ当一个Action被调用时HttpServletRequest ?HttpServletResponse 被传递给executeҎ(gu)?
        ?Struts 2 Action不依赖于容器Q允许Actionq容器单独被测试。如果需要,Struts2 Action仍然可以讉K初始的request和response。但是,其他的元素减或者消除了直接讉KHttpServetRequest ?HttpServletResponse的必要性?

        可测?
        ?试Struts1 Action的一个主要问题是executeҎ(gu)暴露了servlet APIQ这使得试要依赖于容器Q。一个第三方扩展Q-Struts TestCaseQ-提供了一套Struts1的模拟对象(来进行测试)?
        ?Struts 2 Action可以通过初始化、设|属性、调用方法来试Q“依赖注入”支持也使测试更Ҏ(gu)?

        捕获输入:
        ?Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须l承一个基cR因为其他JavaBean不能用作ActionFormQ开发者经常创建多余的cL莯入。动态BeanQDynaBeansQ可以作为创ZlActionForm的选择Q但是,开发者可能是在重新描q?创徏)已经存在的JavaBeanQ仍然会D有冗余的javabeanQ?
        ?Struts 2直接使用Action属性作入属性,消除了对W二个输入对象的需求。输入属性可能是有自??属性的rich对象cd。Action属性能够通过web面上的taglibs讉K。Struts2也支持ActionForm模式。rich对象cdQ包括业务对象,能够用作输入/输出对象。这UModelDriven Ҏ(gu)简化了taglib对POJO输入对象的引用?

        表达式语aQ?
        ?Struts1 整合了JSTLQ因此用JSTL EL。这UEL有基本对象图遍历Q但是对集合和烦引属性的支持很弱?
        ?Struts2可以使用JSTLQ但是也支持一个更强大和灵zȝ表达式语aQ-"Object Graph Notation Language" (OGNL).

        l定值到面QviewQ?
        ?Struts 1使用标准JSP机制把对象绑定到面中来讉K?
        ?Struts 2 使用 "ValueStack"技术,使taglib能够讉KD不需要把你的面QviewQ和对象l定h。ValueStack{略允许通过一pd名称相同但类型不同的属性重用页面(viewQ?
         
        cd转换Q?
        ?Struts 1 ActionForm 属性通常都是Stringcd。Struts1使用Commons-Beanutilsq行cd转换。每个类一个{换器Q对每一个实例来说是不可配置的?
        ?Struts2 使用OGNLq行cd转换。提供基本和常用对象的{换器?

        校验Q?
        ?Struts 1支持在ActionForm的validateҎ(gu)中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容Q但不能校验子对象?
        ?Struts2支持通过validateҎ(gu)和XWork校验框架来进行校验。XWork校验框架使用为属性类cd定义的校验和内容校验Q来支持chain校验子属?

        Action执行的控Ӟ
        ?Struts1支持每一个模块有单独的Request ProcessorsQ生命周期)Q但是模块中的所有Action必须׃n相同的生命周期?
        ?Struts2支持通过拦截器堆栈(Interceptor StacksQؓ每一个Action创徏不同的生命周期。堆栈能够根据需要和不同的Action一起用?


        ]]>
        关于struts国际化的一点尝?/title><link>http://www.aygfsteel.com/zlsunnan/archive/2006/02/27/32646.html</link><dc:creator>☆蓝色梦想☆</dc:creator><author>☆蓝色梦想☆</author><pubDate>Mon, 27 Feb 2006 06:51:00 GMT</pubDate><guid>http://www.aygfsteel.com/zlsunnan/archive/2006/02/27/32646.html</guid><wfw:comment>http://www.aygfsteel.com/zlsunnan/comments/32646.html</wfw:comment><comments>http://www.aygfsteel.com/zlsunnan/archive/2006/02/27/32646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zlsunnan/comments/commentRss/32646.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zlsunnan/services/trackbacks/32646.html</trackback:ping><description><![CDATA[<BR>1、修改web.xml文gQ内容如?<BR><?xml version="1.0" encoding="UTF-8"?><BR><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<A ><BR><web-app><BR>    <servlet><BR>        <servlet-name>action</servlet-name><BR>        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class><BR>        <init-param><BR>            <param-name>config</param-name><BR>            <param-value>/WEB-INF/struts-config.xml</param-value><BR>        </init-param><BR><FONT style="BACKGROUND-COLOR: #d3d3d3">        <init-param><BR>           <param-name>application</param-name><BR>           <param-value>com.sharp.struts.ApplicationResources</param-value><BR>         </init-param></FONT><BR>        <load-on-startup>1</load-on-startup><BR>    </servlet><BR>    <servlet-mapping><BR>        <servlet-name>action</servlet-name><BR>        <url-pattern>*.do</url-pattern><BR>    </servlet-mapping><BR></web-app><BR><BR>文g中灰色背景部分ؓ国际化需要增加的内容Q其?FONT style="BACKGROUND-COLOR: #d3d3d3">com.sharp.struts.ApplicationResources</FONT><FONT style="BACKGROUND-COLOR: #ffffff">跟你的WEB-INF目录下classes下的目录l构是一致的Q如下图所C?BR><IMG height=544 alt=web-xml.jpg src="http://www.aygfsteel.com/images/blogjava_net/zlsunnan/web-xml.jpg" width=654 border=0><BR><BR></FONT>2、徏立资源文件ApplicationResources.source(<FONT style="BACKGROUND-COLOR: #9acd32">中文源文Ӟ而不是中文资源文?/FONT>)、ApplicationResources_en.properties(英文资源文g)?BR>首先建立ApplicationResources_en.properties文gQ内容如下:<BR><FONT style="BACKGROUND-COLOR: #d3d3d3">owner.greet=Greet<BR>owner.name=Name<BR>owner.address=Address<BR>owner.email=Email<BR>owner.tel=Tel<BR><BR><FONT style="BACKGROUND-COLOR: #ffffff">对应的中文源文g内容如下Q?BR>owner.greet=U呼<BR>owner.name=姓名<BR>owner.address=地址<BR>owner.email=?sh)子邮g<BR>owner.tel=联系?sh)?BR><BR>然后通过在cmd中执行native2ascii -encoding GBK ApplicationResources.source .\ApplicationResources_zh_CN.properties<BR>命o中文源文g生成UTF-8格式的中文资源文Ӟ内容如下<BR>owner.greet=\u79f0\u547c<BR>owner.name=\u59d3\u540d<BR>owner.address=\u5730\u5740<BR>owner.email=\u7535\u5b50\u90ae\u4ef6<BR>owner.tel=\u8054\u7cfb\u7535\u8bdd<BR>q里介绍一下,native2ascii是JDK包自带的一个工P如果你不能cmd直接执行native2ascii命oQ请查你的环境变量,q里不具体介l了?BR><BR>3、接着来介l一下struts-config.xml文g的内容,如果熟?zhn)struts的朋友也觉得很简单的<BR><?xml version="1.0" encoding="UTF-8"?><BR><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "<A ><BR><struts-config><BR>    <!-- ========== Form Bean Definitions ================================== --><BR>    <form-beans><BR>        <form-bean name="ownerForm" type="com.sharp.struts.form.OwnerForm"><BR>            <form-property name="Email" type="java.lang.String" /><BR>            <form-property name="Greet" type="java.lang.String" initial="Mr." /><BR>            <form-property name="Address" type="java.lang.String" /><BR>            <form-property name="Tel" type="java.lang.Integer" initial="0" /><BR>            <form-property name="Name" type="java.lang.String" /><BR>        </form-bean><BR>        <BR>    </form-beans><BR>    <BR>    <!-- ========== Global Exception Definitions ============================== --><BR>    <global-exceptions /><BR>    <BR>    <!-- ========== Global Forward Definitions =============================== --><BR>    <global-forwards><BR>        <forward name="failure" path="/failure.jsp" /><BR>        <BR>    </global-forwards><BR>    <BR>    <!-- ========== Action Mapping Definitions =============================== --><BR>    <FONT style="BACKGROUND-COLOR: #d3d3d3"><action-mappings><BR>        <action<BR>            attribute="ownerForm"<BR>            input="/owner.jsp"<BR>            name="ownerForm"<BR>            path="/owner"<BR>            type="com.sharp.struts.action.OwnerAction"<BR>            <FONT color=#0000ff>parameter="formAction"</FONT>><!--因ؓactioncȝ承DispatchActionc,所以需要设|这个属?-><BR>            <forward name="owner"   path="/owner.jsp" /><BR>            <forward name="success" path="/success.jsp" /><BR>        </action></FONT><BR>        <BR>    </action-mappings><BR>    <BR></struts-config><BR><BR>4、现在就开始准备java和jsp文g?BR><STRONG>owner.jsp文g内容如下Q?/STRONG><BR><%@ page contentType="text/html;charset=gb2312" %> <BR><%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> <BR><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> <BR><html:html locale="true"><BR> <head><BR>  <meta name = "Generator" content = "Easy Struts Xslt generator for Eclipse (<A ><BR>  <title>Struts Form for ownerForm</title><BR>  <script language="javascript"><BR>      function changeLanguage(language) {<BR>          if(language == "en") {<BR>              document.all("language").value = "en";<BR>          } else {<BR>              document.all("language").value = "cn";<BR>          }<BR>          document.forms[0].submit();<BR>      }<BR>  </script><BR> </head><BR> <body><BR>  <html:form action="/owner"><BR><FONT color=#0000ff>  <input type="hidden" name="formAction" value="changeLanguage"><BR>  <input type="hidden" name="language"></FONT><BR>   <bean:message key="owner.greet" /> : <html:select property="greet"><BR>      <html:option value=""></html:option><BR>      <html:option value="Mr.">Mr.</html:option><BR>      <html:option value="Miss.">Miss.</html:option><BR>      <html:option value="Mrs.">Mrs.</html:option><BR>     </html:select><html:errors property="greet"/></br>   <BR>   <bean:message key="owner.name" /> : <html:text property="name"/><html:errors property="name"/></br><BR>   <bean:message key="owner.address" /> : <html:text property="address"/><html:errors property="address"/></br><BR>   <bean:message key="owner.email" /> : <html:text property="email"/><html:errors property="email"/></br><BR>   <bean:message key="owner.tel" /> : <html:text property="tel"/><html:errors property="tel"/></br><BR>   <html:submit/><BR>   <html:cancel/><BR>   <input type="button" name="langEn" value="英文? onclick="changeLanguage('en')">   <BR>   <input type="button" name="langCn" value="中文? onclick="changeLanguage('cn')"><BR>  </html:form><BR> <body><BR></html:html><BR></FONT><BR><STRONG><FONT style="BACKGROUND-COLOR: #ffffff">OwnerAction.java文g内容如下Q?/FONT><BR></STRONG></FONT><FONT style="BACKGROUND-COLOR: #ffffff">// Created by Xslt generator for Eclipse.<BR>// XSL :  not found (java.io.FileNotFoundException:  (Bad file descriptor))<BR>// Default XSL used : easystruts.jar$org.easystruts.xslgen.JavaClass.xsl</FONT> <P><FONT style="BACKGROUND-COLOR: #ffffff">package com.sharp.struts.action;</FONT></P> <P><FONT style="BACKGROUND-COLOR: #ffffff">import java.util.Locale;</FONT></P> <P><FONT style="BACKGROUND-COLOR: #ffffff">import javax.servlet.http.HttpServletRequest;<BR>import javax.servlet.http.HttpServletResponse;</FONT></P> <P><FONT style="BACKGROUND-COLOR: #ffffff">import org.apache.struts.Globals;<BR>import org.apache.struts.action.Action;<BR>import org.apache.struts.action.ActionForm;<BR>import org.apache.struts.action.ActionForward;<BR>import org.apache.struts.action.ActionMapping;<BR>import org.apache.struts.actions.DispatchAction;</FONT></P> <P><FONT style="BACKGROUND-COLOR: #ffffff">import com.sharp.struts.form.OwnerForm;</FONT></P> <P><FONT style="BACKGROUND-COLOR: #ffffff">/** <BR> * OwnerAction.java created by EasyStruts - XsltGen.<BR> * </FONT><A ><FONT style="BACKGROUND-COLOR: #ffffff">http://easystruts.sf.net</FONT></A><BR><FONT style="BACKGROUND-COLOR: #ffffff"> * created on 10-09-2004<BR> * <BR> * XDoclet definition:<BR> * @struts:action path="/owner" name="ownerForm" input="/owner.jsp" validate="true"<BR> * @struts:action-forward name="/success.jsp" path="/success.jsp"<BR> */<BR>public class OwnerAction extends DispatchAction {</FONT><FONT style="BACKGROUND-COLOR: #ffffff"><BR> <BR> public ActionForward changeLanguage(<BR>  ActionMapping mapping,<BR>  ActionForm form,<BR>  HttpServletRequest request,<BR>  HttpServletResponse response) {<BR><BR></FONT><FONT style="BACKGROUND-COLOR: #ffffff">   String language = request.getParameter("language");   <BR>   if (language.equals("en")) {<BR>        request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.ENGLISH);    <BR>   } else {    <BR>        request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.CHINESE);<BR>   }</FONT><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff">   <BR>        return mapping.findForward("owner");<BR>    }<BR>}<BR><FONT color=#0000ff><STRONG>q里需要注意一下,千万不要弄错Q我在这里就p了一个多时Q因为把文g名写错了<BR>Locale.ENGLISH是一个Locale对象QgetLanguage()Ҏ(gu)q回enQ跟资源文g(ApplicationResources_<FONT style="BACKGROUND-COLOR: #ffffff" color=#ff0000>en</FONT>.properties)的后~相同<BR></STRONG><FONT color=#000000><STRONG><FONT color=#0000ff>Locale.<FONT color=#0000ff>CHINESE</FONT>是一个Locale对象QgetLanguage()Ҏ(gu)q回zhQ跟资源文g(ApplicationResources_</FONT><FONT style="BACKGROUND-COLOR: #ffffff" color=#ff0000>zh<FONT color=#0000ff>_CN</FONT></FONT><FONT color=#0000ff>.properties)的后~相同</FONT></STRONG></FONT></FONT><BR><BR><STRONG>另外q用C个ownerForm.java文gQ内容如下:</STRONG><BR>// Created by Xslt generator for Eclipse.<BR>// XSL :  not found (java.io.FileNotFoundException:  (Bad file descriptor))<BR>// Default XSL used : easystruts.jar$org.easystruts.xslgen.JavaClass.xsl</FONT></FONT></P> <P><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff">package com.sharp.struts.form;</FONT></FONT></P> <P><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff">import javax.servlet.http.HttpServletRequest;</FONT></FONT></P> <P><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff">import org.apache.struts.action.ActionError;<BR>import org.apache.struts.action.ActionErrors;<BR>import org.apache.struts.action.ActionForm;<BR>import org.apache.struts.action.ActionMapping;</FONT></FONT></P> <P><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff">/** <BR> * OwnerForm.java created by EasyStruts - XsltGen.<BR> * <A >http://easystruts.sf.net</A><BR> * created on 10-09-2004<BR> * <BR> * XDoclet definition:<BR> * @struts:form name="ownerForm"<BR> */<BR>public class OwnerForm extends ActionForm {</FONT></FONT></P> <P><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff"> // --------------------------------------------------------- Instance Variables</FONT></FONT></P> <P><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff"> /** Email property */<BR> private String email;</FONT></FONT></P> <P><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff"> /** Greet property */<BR> private String greet = "Mr.";</FONT></FONT></P> <P><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff"> /** Address property */<BR> private String address;</FONT></FONT></P> <P><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff"> /** Tel property */<BR> private int tel = 0;</FONT></FONT></P> <P><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff"> /** Name property */<BR> private String name;<BR></FONT></FONT><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff"> // --------------------------------------------------------- Methods<BR>......<BR>//getter,setter mothodQ这里不赘列?BR></FONT></FONT></P> <P><FONT style="BACKGROUND-COLOR: #d3d3d3"><FONT style="BACKGROUND-COLOR: #ffffff">}<BR><BR>5、ȝ<BR>q样一个国际化的小例子可以运行了Q不q上面写得比较粗略,需要对java和struts有一定了解?BR>|上对国际化也有其他的做法,也可以参考?BR>如果上述有所偏颇Q敬h正?BR></FONT></FONT></P><img src ="http://www.aygfsteel.com/zlsunnan/aggbug/32646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zlsunnan/" target="_blank">☆蓝色梦想☆</a> 2006-02-27 14:51 <a href="http://www.aygfsteel.com/zlsunnan/archive/2006/02/27/32646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">׿</a>| <a href="http://" target="_blank">;</a>| <a href="http://" target="_blank">ͺ</a>| <a href="http://" target="_blank">崨</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͩ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank">ϲ</a>| <a href="http://" target="_blank">ɽʡ</a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">Ͽ</a>| <a href="http://" target="_blank">°Ͷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ղ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ԫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ѭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">γ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">տ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ѱ</a>| <a href="http://" target="_blank">봨</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>