传智播客 struts2视图result的种类和常量总结

 

      在前面<action>元素都配置了相应的属性,struts2给某些属性提供了默认值。如果没有为action指定class,默认是ActionSupport;如果没有为action指定method,默认执行action中的execute() 方法;如果没有指定result的name属性,默认值为success。因此,有了这些默认值,当在前面的应用中,这些属性都不配置,然后更改一下JSP页面的内容,把输出message的EL表达式删掉。再次运行程序,发现仍然能显示出修改后的页面。查看ActionSupport的源代码,可以发现其中的execute方法返回的就是"success"字符串。
    以上是关于action元素的配置,result元素配置类似于struts1中的forward,但struts2中提供了多种结果类型,常用的类型有:dispatcher(默认值)、redirect、redirectAction和plainText四种类型。其中默认值dispatcher就是前面用到的,这种方式是服务器内部的转发。struts2提供了一个比较有用的功能:在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性。如下:<result type="redirect">/view.jsp?id=${id}</result>,这种方式的重定向式浏览器重定向,相当于重新发一个新的请求,并且在重定向时,EL表达式中id的值能够从action获取到。另外一个重定向是redirectAction,如果重定向的action在同一个包下,就就可以直接写上从定向目的地的action的名字。如果是不同的包下,就需要通过两个参数来指定action的名字和名称空间的值。同一个包下:
      <result type="redirectAction">helloworld</result>
如果重定向的action在别的命名空间下:
      <result type="redirectAction">
          <param name="actionName">helloworld</param>
          <param name="namespace">/test</param>
      </result>
    最后一种类型就是plaintext,它用来显示原始文件内容,例如:当我们需要原样显示jsp文件源代码 的时候,我们可以使用此类型,需要注意的是一定要指定源文件的编码方式,否则显示的页面将出现乱码:
      <result name="source" type="plainText ">
          <param name="location">/hello.jsp</param>
          <param name="charSet">UTF-8</param>
      </result>
    当多个action中都使用到了相同视图,这时就应该把result定义为全局视图。全局视图的定义方式是将试图定义放在<global-results>中就可以了,但是只要只能是同一个包下action才能跳转到全局视图。如果要不同的包也能公用全局视图,可以专门为这些公用的全局试图定义一个包,注意这个包要继承struts-default,然后其需要用到这个全局视图的包再继承这个公共的包。action元素中除了定义视图元素外,还可以用来往Action类中的属性注入相应的值。所用的元素就是<param>,该元素的name属性需要和相应Action类的属性一致,并且要提供setter方法。
    前面都是默认使用.action后缀访问Action。其实在struts2中,默认后缀是可以通过常量struts.action.extension进行修改的,例如:我们可以配置Struts 2只处理以.do为后缀的请求路径:<constant name="struts.action.extension" value="do"/>。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号隔开。除了这个常量外,还有其它一些常用的常量,总结如下:
      1.指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freemarker、velocity的输出:<constant name="struts.i18n.encoding" value="UTF-8"/>
      2.该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号隔开:<constant name="struts.action.extension" value="do,action"/>
      3.设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭:<constant name="struts.serve.static.browserCache" value="false"/>
      4.当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开:<constant name="struts.configuration.xml.reload" value="true"/>
      5.开发模式下使用,这样可以打印出更详细的错误信息:<constant name="struts.devMode" value="true" />
      6.默认的视图主题:<constant name="struts.ui.theme" value="simple" />
      7.与spring集成时,指定由spring负责action对象的创建:<constant name="struts.objectFactory" value="spring" />
      8.该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false:<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
      9.上传文件的大小限制:<constant name="struts.multipart.maxSize" value=“10701096"/>
    因为常量可以在下面多个配置文件中进行定义,如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值,struts2加载常量的搜索顺序:struts-default.xml、struts-plugin.xml struts.xml、struts.properties、web.xml。

      这些常量的配置是非常有用的,比如第5个常量,当配置成true以后,在开发中能大大的提高效率。处理错误时间也变短。当然了在开发中需要配置,但是在产品发布的时候这个配置就要取消了。第二个常量的配置可以按开发人员的习惯来命名后缀。如果用到文件上传操作,第9个配置就会起作用了,而且在程序中可以动态改变,减少了开发人员的工作量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值