Webwork2

webwork.properties

Webwork属性配置文件。Webwork有个缺省的属性配置文件default.properties,在webwork.jar文件中,你可以建立一个webwork.properties
文件重新设置相关属性,相同属性的设置webwork.properties将覆盖default.properties的设置。下面是个default.properties内容,对其中
属性作点说明:
###国别区域设置中国就设为zh_CN
webwork.locale=en_US
###指定Webwork2采用哪个解析器解析以multipart/form-data发送的Http请求
#webwork.multipart.parser=cos
webwork.multipart.parser=pell
#设置Servlet上下文临时文件目录位置及上传文件大小的最大值
#如果没有指定saveDir,将使用容器的临时目录
webwork.multipart.saveDir=
webwork.multipart.maxSize=2097152
###Loadcustompropertyfiles(doesnotoverridewebwork.properties!)
webwork.custom.properties=application,com/webwork/extension/custom
#Action的后缀名称
webwork.action.extension=action
#标准UI主题,用于定义缺省主题模板在哪个位置,相对于/
webwork.ui.theme=xhtml
webwork.ui.templateDir=template
###设置当xwork.xml文件发生改变时是否重新载入
webwork.configuration.xml.reload=false
###指定velocity模板引擎的属性文件
webwork.velocity.configfile=velocity.properties
###链到WebWorkVelocityContext的VelocityContext类名列表,用逗号分割
webwork.velocity.contexts=

-webwork-default.xml

webwork-default.xml包含在webwork.jar中,是一个基本配置文件,里面配置了标准的ResultType、Interceptors以及两个interceptorsstacks
defaultStack和validationWorkflowStack,可以Include到xwork.xml文件直接使用而不必进行Copy。如:
<!DOCTYPExworkPUBLIC"-//OpenSymphonyGroup//XWork1.0//EN""http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<includefile="webwork-default.xml"/>

<packagename="default"extends="webwork-default">
...
</package>
</xwork>

下面是Webwork2.1的webwork-default.xml文件内容:
<!DOCTYPExworkPUBLIC"-//OpenSymphonyGroup//XWork1.0//EN""http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<packagename="webwork-default">
<result-types>
<result-typename="dispatcher"class="com.opensymphony.webwork.dispatcher.ServletDispatcherResult"default="true"/>
<result-typename="redirect"class="com.opensymphony.webwork.dispatcher.ServletRedirectResult"/>
<result-typename="velocity"class="com.opensymphony.webwork.dispatcher.VelocityResult"/>
<result-typename="chain"class="com.opensymphony.xwork.ActionChainResult"/>
<result-typename="xslt"class="com.opensymphony.webwork.views.xslt.XSLTResult"/>
<result-typename="jasper"class="com.opensymphony.webwork.views.jasperreports.JasperReportsResult"/>
<result-typename="freemarker"class="com.opensymphony.webwork.views.freemarker.FreemarkerResult"/>
</result-types>
<interceptors>
<interceptorname="timer"class="com.opensymphony.xwork.interceptor.TimerInterceptor"/>
<interceptorname="logger"class="com.opensymphony.xwork.interceptor.LoggingInterceptor"/>
<interceptorname="chain"class="com.opensymphony.xwork.interceptor.ChainingInterceptor"/>
<interceptorname="static-params"class="com.opensymphony.xwork.interceptor.StaticParametersInterceptor"/>
<interceptorname="params"class="com.opensymphony.xwork.interceptor.ParametersInterceptor"/>
<interceptorname="model-driven"class="com.opensymphony.xwork.interceptor.ModelDrivenInterceptor"/>
<interceptorname="component"class="com.opensymphony.xwork.interceptor.component.ComponentInterceptor"/>
<interceptorname="token"class="com.opensymphony.webwork.interceptor.TokenInterceptor"/>
<interceptorname="token-session"class="com.opensymphony.webwork.interceptor.TokenSessionStoreInterceptor"/>
<interceptorname="validation"class="com.opensymphony.xwork.validator.ValidationInterceptor"/>
<interceptorname="workflow"class="com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor"/>
<interceptorname="servlet-config"class="com.opensymphony.webwork.interceptor.ServletConfigInterceptor"/>
<interceptorname="prepare"class="com.opensymphony.xwork.interceptor.PrepareInterceptor"/>
<interceptorname="conversionError"class="com.opensymphony.webwork.interceptor.WebWorkConversionErrorInterceptor"/>
<interceptor-stackname="defaultStack">
<interceptor-refname="static-params"/>
<interceptor-refname="params"/>
<interceptor-refname="conversionError"/>
</interceptor-stack>
<interceptor-stackname="validationWorkflowStack">
<interceptor-refname="defaultStack"/>
<interceptor-refname="validation"/>
<interceptor-refname="workflow"/>
</interceptor-stack>
</interceptors>
</package>
</xwork>

-validators.xml

Webwork2的验证完全利用XWork的验证框架,用于Action执行前的输入数据验证。
Validators应用前首先要进行注册,由于XWork的ValidatorFactory完成这项工作。在程序中可以用
ValidatorFactory.registerValiator(Stringname,StringclassName)
静态方法进行Validator的注册;或者将Validator.xml文件放在/WEB-INF/classes下,其内容如下:
<validators>
<validatorname="required"class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
<validatorname="requiredstring"class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>
<validatorname="int"class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
<validatorname="date"class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
<validatorname="expression"class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
<validatorname="fieldexpression"class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
<validatorname="email"class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
<validatorname="url"class="com.opensymphony.xwork.validator.validators.URLValidator"/>
<validatorname="visitor"class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
<validatorname="conversion"class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
</validators>

第二步是将其与需要执行验证的Action关联起来,就是给相应Action指定ValidationInterceptor,这个过程在进行Action配置(xwork.xml)
时完成,具体就是将ValidationInterceptor-refs加在Action配置中:
<interceptorname="validator"class="com.opensymphony.xwork.validator.ValidationInterceptor"/>
<actionname="MyAction"class="com.opensymphony.webwork.example.MyAction">
<resultname="success"type="velocity">
<paramname="location">/success.vm</param>
</result>
<interceptor-refname="validator"/>
</action>
缺省的validationWorkflowStack已包含validator。
验证规则:
每个Action类可以指定一个ActionName-validation.xml
每个Action别名可以指定一个ActionName-Alias-validation.xml
扩展类和接口实现类Action,Webwork将向上搜索继承树,查找Action的父类和被实现接口的缺省Validator
最后在相应的xxx-validation.xml中指定验证内容。下面是个示例:SimpleAction-validation.xml

<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
<fieldname="bar">
<field-validatortype="required">
<message>Youmustenteravalueforbar.</message>
</field-validator>
<field-validatortype="int">
<paramname="min">6</param>
<paramname="max">10</param>
<message>barmustbebetween${min}and${max},currentvalueis${bar}.</message>
</field-validator>
</field>
<fieldname="date">
<field-validatortype="date">
<paramname="min">12/22/2002</param>
<paramname="max">12/25/2002</param>
<message>Thedatemustbebetween12-22-2002and12-25-2002.</message>
</field-validator>
</field>
<fieldname="foo">
<field-validatortype="int">
<paramname="min">0</param>
<paramname="max">100</param>
<messagekey="foo.range">Couldnotfindfoo.range!</message>
</field-validator>
</field>
<validatortype="expression">
<paramname="expression">foo>bar</param>
<message>FoomustbegreaterthanBar.Foo=${foo},Bar=${bar}.</message>
</validator>
</validators>

解析SimpleAction-validation.xml文件。
我们看到,field-validator、validator元素都有一个type属性,它其实就是由ValidatorFactiory注册的Validator的名子。
param参数是可选的,message元素是必须的。message元素可以有个key属性,通过key可以在Action验证失败时显示国际化信息。这里关于
通过key获取国际化信息的说法在Webwork2的Reference中有点不准确,LocaleAware接口是Webwork2的迁移版本。在Webwork2.1正式
版是通过action调用getText()方法来取得国际化文本,不过这个action必须扩展ActionSupport或实现LocaleProvider、TextProvider
接口。${...}中的值可以来自validator或action,如
barmustbebetween${min}and${max},currentvalueis${bar}.
其中${min}${max}来自validator,而${bar}来自action。

>components.xml

Ioc配置文件。在Webwork2中,Ioc用于实现Component管理。要利用IIoc功能必须进行下面三步设置。

1.配置web.xml文件
要允许该功能,必对web.xml进行下列配置:
<filter>
<filter-name>container</filter-name>
<filter-class>com.opensymphony.webwork.lifecycle.RequestLifecycleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>container</filter-name>
<url-pattern>*.action</url-pattern><!--modifyappropriately-->
</filter-mapping>
<listener>
<listener-class>com.opensymphony.webwork.lifecycle.SessionLifecycleListener</listener-class>
</listener>
<listener>
<listener-class>com.opensymphony.webwork.lifecycle.ApplicationLifecycleListener</listener-class>
</listener>
关于web.xml文件的配置请查阅servlet规范或web.xml的DTD。
上面设置允许Webwork2管理application,session,request作用域的,既是在你的应用中只用到一个作用域的对象,上面三个
filter都必须正确设置。

2.配置xwork.xml
ComponentInterceptor用来应用Ioc模式到XWork的Action,在xwork.xml的Interceptors元素中应包含下面内容:
<interceptorname="component"class="com.opensymphony.xwork.interceptor.component.ComponentInterceptor"/>
应当确保所有需要注入Componenet的Action都有这个Interceptor的引用。关于如何进行配置Interceptor参见上面xwork.xml文件
配置说明。

想要在别的对象或Component上应用Ioc,需要直接使用ComponentManager对象。
defaultStack内含ComponentInterceptor,所以如果你的action应用了defaultStack,ComponentInterceptor也就包含到里面了。
3.配置components.xml文件
该文件用来指定哪个component将应用Ioc模式来注入给action,该配置由XWork的ComponentManager对象来加载,然后应用给任何
实现enabler接口的action。该文件必须放在/WEB-INF/classes下,下面是个组件Counter的配置示例,Counter对象的生命与
session的相同,该Component将传给任一实现CounterAware接口的action类。
<components>
<component>
<scope>session</scope>
<class>com.opensymphony.webwork.example.counter.Counter</class>
<enabler>com.opensymphony.webwork.example.counter.CounterAware</enabler>
</component>
</components>
每个component必须有下面三属性设置:
scope:有效值是application,session,request,不同的值决定component的生存期。其含义与ASP、JSP中的相应对象相同。
class:component类。在指定的scope期间,该类的一个实例将对象需要该组件的action有效。该组件是lazy-loaded的,只有
真正需时才被创建,组件的实现必须有一个不带参数的构造器。
enabker:任何实现该接口的action都将会被注入该组件对象的实例。
需要说明的是,当components依赖另外的components时,后者的scope不能比前者窄。比如上面的sessioncomponent不能依赖于一个
requestscope的component。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值