webwork主要配置(二)

 xwork.xml

Package(包)

Packages是把Actions, Results, Result Types, Interceptors和Stacks分组成逻辑单元的一种方式,以分享一些共同设置.包跟对象一样可以扩展,也可以被"子"包覆盖部分属性.

"name"属性是package的必需,在这个package被引用时作为key. "extends"属性是可选的,使一个package可以继承一个或多个前面package中的拦截器,拦截器栈,action等配置.注意,配置文件是被至上而下处理的,所以"被继承"的包必需定义在"继承"包的上面. "abstract"是可选的表示一个包为抽象包,这样的包可以被继承,但是不能有action的定义.

属性 必需 描述
name 被其它包引用时的key
extends 否  继承其它包
namespace 否  参见名称空间的配置
abstract 否  把包声明为抽象(包中没有action定义)

"namespace"名称空间属性允许把action配置分成不同的名称空间,这样您可以在具有不同类和参数名称空间中使用相同的名字的action了.这一点是和Webwork1.x不同,在Webwork1.x中所有的action名字都是全局的不能再一个应用程序中重用.Webwork中有以"/"命名的根名称空间,它是请求直接来自应用程序根路径的时候的名称空间.和其他名称空间一样,如果在根名称空间中没有所需的action别名,系统会回到默认名称空间中查找.

注意:

应该保证在每个名称空间中只有一个默认action被配置.因此如果你在同一个空间里配置了多个默认aciton,系统就不知道那个是默认的了.

Include configuration (包含xml文件)

为了方便的管理大型项目(非常多的action和配置),Webwork允许您在xwork.xml中包含其他的配置文件.被包含的文件必须是xwork.xml的格式(有doctype和其他每样东西),而且必须放在classpath下(通常是/WEB-INF/classes或/WEB-INF/lib下的jar文件中).

Action configuration

Action是Webwork的基础"工作单元".一个action一般就是一个请求(或点击按钮或提交表单).action元素(tag就和JSP太同义了)有两部分,一个友好的名字(URL相关,如saveForm.action)和一个负责"处理"的类.

< action  name ="formTest"  class ="com.opensymphony.webwork.example.FormAction"  method ="processForm" >

可选属性"method"用来告诉WebWork调用action的那个方法.如果method属性为空,WebWork调用默认调用*execute*()方法.如果Action类中既没有execute()方法也没有在xml文件中指定其他方法,WebWork会抛出异常.

您也可以在您的表单中用"actionName!something"的方式告诉WebWork调用Action类中的"something"方法.例如"formTest!save.action"会调用FormAction类中的"save"方法.这个方法必须是public且没有参数.

"actionName"的所有配置包括拦截器和返回类型等都会被"actionName!something"使用.

public  String save()  throws  Exception {
...
return SUCCESS;
}

Action的类属性可以像下面一样省略:

在这种情况下,会缺省使用com.opensymphony.xwork.ActionSupport 类,它有一个execute()方法,缺省返回SUCCESS.

< action  name ="myAction" >
   ....
</ action >

从Webwork2.2.1开始您也可以指定一个当xwork.xml中找不到指定的action时执行的默认action.这一特性主要是用来满足为创建非常简单或相似的action类或元素的需求.默认action名可以在package元素里面这样配置:

< package  name ="myPackage"  .... >

...

< default-action-ref  name ="simpleViewResultAction" >

<!--  
An example of a default action that is just a simple class 
that has 3 fields: successUrl, errorUrl, and inputUrl. This action 
parses the request url to set the result values. In the normal case 
it just renders velocity results of the same name as the requested url.
-->
< action  name ="simpleViewResultAction"  class ="SimpleViewResultAction" >
< result  type ="velocity" > ${successUrl} </ result >
< result  name ="error"  type ="velocity" > ${errorUrl} </ result >
< result  name ="input"  type ="velocity" > ${inputUrl} </ result >
</ action >

... 

</ package >

 

Result Configuration (结果配置)

Result是Action返回的表示Action执行情况的字符串常量.WebWork定义了一些默认结果:error, input, login, none and success.开发者当然也可以根据应用情况自由的定义结果.结果以"名字-值"的形式影射到结果类型.

结果标签告诉WebWork在action被调用以后下一步做什么.这里是WebWork定义好的一些结果编码:

String SUCCESS  =   " success " ;
String NONE    
=   " none " ;
String ERROR   
=   " error " ;
String INPUT   
=   " input " ;
String LOGIN   
=   " login " ;

您可以自己扩展.大多数情况下你会用到 SUCCESS 或 ERROR ,当返回 SUCCESS 时跳转到下应用程序的一个页面.

< result  name ="success"  type ="dispatcher" >
    
< param  name ="location" > /thank_you.jsp </ param >
</ result >

...如果返回*ERROR*转向错误页面或回到前面的页面.

< result  name ="error"  type ="dispatcher" >
    
< param  name ="location" > /error.jsp </ param >
</ result >

结果在xwork.xml文件中定义,嵌套在<action>标签里.如果location参数是唯一的参数,你可以这样简单的定义:

< action  name ="bar"  class ="myPackage.barAction" >
  
< result  name ="success"  type ="dispatcher" >
    
< param  name ="location" > foo.jsp </ param >
  
</ result >
</ action >

注意:

第一个result的属性省略了,WebWork缺省会把它当作"success".如果没有指定<result ...>标签的type属性,WebWork默认为dispatcher类型(类似于Servlet标准中的SerlvetDispatcher的forward)

Interceptor Configuration

拦截器允许您定义一些能在一个action执行的前后执行的代码.它是做web应用程序时很有用的工具.最常见的拦截器实现可以是:

  • 安全检查(确保访问者是登陆用户)
  • 跟踪日志(记录每个action)
  • 效率瓶颈检查(记录每个action开始和结束的时间以检查程序中的瓶颈)

您也可以把拦截器连在一起组成 拦截器栈.如果您想在action执行前同时做登陆检查,安全检查和记录日志,可以定义一个拦截器的包.

拦截器必须事先定义(命名)好,然后可以连在一起组成一个栈.

< interceptors >
  
< interceptor  name ="security"  class ="com.mycompany.security.SecurityInterceptor" />
  
< interceptor-stack  name ="defaultComponentStack" >
    
< interceptor-ref  name ="component" />
    
< interceptor-ref  name ="defaultStack" />
  
</ interceptor-stack >
</ interceptors >

在action中这样使用.

< action  name ="VelocityCounter"  class ="com.opensymphony.webwork.example.counter.SimpleCounter" >
   
< result  name ="success" > ... </ result >
   
< interceptor-ref  name ="defaultComponentStack" />
</ action >

注意:引用名既可以是拦截器名也可以是栈名

xwork.xml code:

< xwork >

    
< include  file ="webwork-default.xml" />

    
< package  name ="default"  extends ="webwork-default" >
        
< interceptors >
            
< interceptor-stack  name ="crudStack" >
                
< interceptor-ref  name ="params"   />
                
< interceptor-ref  name ="defaultStack"   />
            
</ interceptor-stack >
        
</ interceptors >
        
    
< default-action-ref  name ="showcase" />
        
        
< action  name ="showcase" >
            
< result > showcase.jsp </ result >
        
</ action >

        
< action  name ="date"  class ="com.opensymphony.webwork.showcase.DateAction" >
            
< result  name ="success" > /date.jsp </ result >
        
</ action >

    
</ package >

    
< package  name ="skill"  extends ="default"  namespace ="/skill" >
        
< default-interceptor-ref  name ="crudStack" />

        
< action  name ="list"  class ="com.opensymphony.webwork.showcase.action.SkillAction"  method ="list" >
            
< result > /empmanager/listSkills.jsp </ result >
            
< interceptor-ref  name ="basicStack" />
        
</ action >
        
< action  name ="edit"  class ="com.opensymphony.webwork.showcase.action.SkillAction" >
            
< result > /empmanager/editSkill.jsp </ result >
            
< interceptor-ref  name ="params"   />
            
< interceptor-ref  name ="basicStack" />
        
</ action >
        
< action  name ="save"  class ="com.opensymphony.webwork.showcase.action.SkillAction"  method ="save" >
            
< result  name ="input" > /empmanager/editSkill.jsp </ result >
            
< result  type ="redirect" > edit.action?skillName=${currentSkill.name} </ result >
        
</ action >
        
< action  name ="delete"  class ="com.opensymphony.webwork.showcase.action.SkillAction"  method ="delete" >
            
< result  name ="error" > /empmanager/editSkill.jsp </ result >
            
< result  type ="redirect" > edit.action?skillName=${currentSkill.name} </ result >
        
</ action >
    
</ package >

    
< package  name ="employee"  extends ="default"  namespace ="/employee" >
        
< default-interceptor-ref  name ="crudStack" />

        
< action  name ="list"  class ="com.opensymphony.webwork.showcase.action.EmployeeAction"  method ="list" >
            
< result > /empmanager/listEmployees.jsp </ result >
            
< interceptor-ref  name ="basicStack" />
        
</ action >
        
< action  name ="edit"  class ="com.opensymphony.webwork.showcase.action.EmployeeAction" >
            
< result > /empmanager/editEmployee.jsp </ result >
            
< interceptor-ref  name ="crudStack" >< param  name ="validation.excludeMethods" > execute </ param ></ interceptor-ref >
        
</ action >
        
< action  name ="save"  class ="com.opensymphony.webwork.showcase.action.EmployeeAction"  method ="save" >
            
< result  name ="input" > /empmanager/editEmployee.jsp </ result >
            
< result  type ="redirect" > edit.action?empId=${currentEmployee.empId} </ result >
        
</ action >
        
< action  name ="delete"  class ="com.opensymphony.webwork.showcase.action.EmployeeAction"  method ="delete" >
            
< result  name ="error" > /empmanager/editEmployee.jsp </ result >
            
< result  type ="redirect" > edit.action?empId=${currentEmployee.empId} </ result >
        
</ action >
    
</ package >

</ xwork >

Views (表现层)

WebWork支持JSP和Velocity(译者注:还有Freemaker,Xslt,Groovy等)作为表现层技术.这个例子中我们使用JSP文件.WebWork提供了一套标签库(taglibs).你可以在JSP文件中把这些标签作为组件使用.这里是form.jsp页的一部分.

<% @ taglib prefix="ww" uri="webwork"  %>
< html >
< head >< title > Webwork Form Example </ title ></ head >
< body >
   
< ww:form  name ="myForm"  action ="'formTest'"  namespace ="/"  method ="POST" >
  
< table >
    
< ww:textfield  label ="First Name"  name ="'formBean.firstName'"  value ="formBean.firstName" />
    
< ww:textfield  label ="Last Name"  name ="'formBean.lastName'"  value ="formBean.lastName" />
    
< ww:submit  value ="Save Form" />
  
</ table >
</ ww:form >
</ body >

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值