浏览 6213 次
锁定老帖子 主题:Webwork之Action配置详解
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-21
作者:Davy Lee, davy.lee@126.com Webwork的核心是负责web应用程序中具体逻辑实现的action,本文的目的就是对action的配置、xwok.xml文件的部署进行详细的阐述,本文先列出配置action的注意事项及技巧,最后将给出一个具体的配置实例。 1. 让你的xwork.xml文件包含webwork-default.xml,因为它里面包含了许多默认的配置 代码如下: <include name=”webwork-default.xml”/> 2.使用隐式默认的result类型有助于减少必需的配置内容,代码如下: <xwork> <include name=”webwork-default.xml”/> <package name=”default” extends=”webwork-default”> <result-types> <result-type name=”velocity” class=”com.opensymphony.webwork.dispatcher.VelocityResult”default=”true” /> </result-types> <action name=”login” class=”dealLogin” method=”doLogin”> <result name=”success”>userIndex.htm</result> </action> </package> </xwork> 这样我们在default这个package中指定了默认的result-type为velocity,则在此包中配置的名为login这个action中,虽然结果result没有写type=”velocity”,webwork仍然会按照默认的结果类型即velocity进行调度。 3.运用全局的result映射减少重复的配置,你可以为每个package定义任意数量的全局result映射,即<global-results>,代码如下: <xwork> <include name=”webwork-default.xml”/> <package name=”default” extends=”webwork-default”> <result-types> <result-type name=”velocity” class=”com.opensymphony.webwork.dispatcher.VelocityResult”default=”true” /> </result-types> <global-results> <result name=”error” type=”velocity”>/error.htm</result> </global-results> <action name=”login” class=”dealLogin” method=”doLogin”> <result name=”success”>userIndex.htm</result> </action> </package> </xwork> 这样我们执行login.action如果返回的标识码为error,尽管我们没有单独对login这个action定义result=”error”接点,webwork还是会定向到/error.htm页去。这里要注意两点,第一,局部的映射会覆盖掉全局映射;第二,全局映射要用绝对地址。 4.使用默认的interceptor-ref减少拦截机(栈)的重复配置,可以为每个package定义一个默认的interceptor-ref,代码如下: <xwork> <include name=”webwork-default.xml”/> <package name=”default” extends=”webwork-default”> <result-types> <result-type name=”velocity” class=”com.opensymphony.webwork.dispatcher.VelocityResult”default=”true” /> </result-types> <global-results> <result name=”error” type=”velocity”>/error.htm</result> </global-results> <interceptors> <interceptor name=”param” class=”…”/> <interceptor name=”timer” class=””/> </interceptors> <default-interceptor-ref name=”param”/> <action name=”login” class=”dealLogin” method=”doLogin”> <result name=”success”>userIndex.htm</result> </action> </package> </xwork> 这样我们就为这个package 指定了默认的拦截机paramInterceptor,如果此包中的login这个action没有显式指定interceptor,则webwork会按照param拦截机来处理。这里提醒两点:第一,可以把多个interceptor按照顺序组合起来组成interceptor-stack,然后把这个interceptor设置成default-interceptor-ref;第二,如果为某个action如login.action定义了interceptor,则会覆盖掉default-interceptor-ref,webwork会忽略掉default-interceptor-ref,只会按照局部的interceptor来处理。 5.package,抽象package和namespace (1).抽象package和package很类似,只是里面不能有具体的action的映射,它的作用是提供基础的package的配置,供其他package扩展(或说继承).可以通过设置布尔类型的abstract属性为true来标识一个package为抽象package.(这个我没有试验,大家可以试验一下,呵呵)。 (2).namespace,命名空间,如果某个package 没有指定namespace,则它的默认namespace为“ ”,webwork会把你的url拆分成namespace和action名字两部分,然后webwork就会从xwork.xml中查找namespace/action命名对,如果找不到,就到默认的namespace中去找;大型应用中,应该尽量减少定义在default namespace中的action的数目。 对于webwork的action的配置,我就介绍到这里,有不当之处欢迎大家指正。最后给大家的是一个具体的例子,来自《webwork in action》一书,只为演示,供大家参考。以下例子中有3个package,default package提供基础配置,secure package存放需要认证的action,public package 存放公开的action,详细配置文件如下: ------------------------------------------------------ xwork.xml ----------------------------------------------- <xwork> <include name=”webwork-default.xml”/> <package name=”default” extends=”webwork-default”> <interceptors> <interceptor name=”auth” class=”org.hibernate.auction.web.interceptors.AuthenticationInterceptor”/> <interceptor name=”timer” class=””/> </interceptors> <global-results> <result name=”error” type=”velocity”>/error.htm</result> </global-results> </package> </xwork> ------------------------------------------------------ xwork-public .xml --------------------------------------- <xwork> <package name=”public” extends=”default” namespace=”/public”> <default-interceptor-ref name=” completeStack” /> <action> …………… </action> </package> </xwork> ----------------------------------------------------xwork-secure.xml---------------------------------------- <xwork> <package name=”secure” extends=”default” namespace=”/secure”> <interceptor-stack name=”default”> <interceptor-ref name=”auth”/> <interceptor-ref name=”completeStack”/> </interceptor-stack> <default-interceptor-ref name=”default” /> <!—受保护的action--> <action> …………… </action> </package> </xwork> (全文完,作者:Davy Lee,邮件地址:davy.lee@126.com) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-23
应该注明"(摘自<<Webwork in action>>一书)"...
|
|
返回顶楼 | |
发表时间:2007-07-23
这不是原文,里面有我的话,条理结构也是我组织的,当然我的确是参照的《webwork in action》,而且文中也提到了!但要写“摘自某某”,我觉得我的笔墨就玷污了那本书了
|
|
返回顶楼 | |
发表时间:2008-06-18
不错,有我想要的:<global-results> <result name=”error” type=”velocity”>/error.htm</result> </global-results>
|
|
返回顶楼 | |