2009-10-31 15:01WebWork标签库分为七大类:
通用标签: 最常用, 最基本的标签;
组件化标签: 鼓励视图的组件化;
流程控制标签: 在JSP页面中管理控制流程;
迭代标签: 迭代元素并操作可迭代(iterable)的对象;
UI标签: 生成HTML表单字段和控件;
VUI标签: 在WebWork2.0版本之后,VUI 标签已经从WebWork里移除.因为它们在4年中基本没有被使用过;
国际化支持标签: 提供国际化视图支持.
通用标签
<ww:property /> 获取结果的属性值. 如果值未指定, 将返回栈顶值.
<ww:push />
将一个值压入值栈.
<ww:param />
设置父标签的参数. 仅用于其他标签内部, 用于设置父标签某些属性的值.
<ww:set />
将值栈中的某个对象的值设置到一个scope(page, stack, application, session)中. 如果值未给定, 将使用栈顶值. 如果scope未给定, 使用"webwork"的缺省scope.
<ww:url />
构建一个编码的URL.
组件化标签
<ww:action /> 在标签库的上下文环境中执行一个活动. 标签的主体用来显示活动执行的结果.
<ww:bean />
创建一个JavaBean, 初始化它的属性并放入ActionContext以便后续使用.
<ww:include />
包含另一个页面或活动.
流程控制标签
这个if-else的标签集合就像if-else脚本一样.
<ww:if /> 有条件执行路径. 换言之, 如果布尔条件是true的话, 就运算标签主体内容.
<ww:else />
if标签的反向执行路径. 换言之, 如果前一个if标签的布尔条件是false的话, 就运算标签主体内容.
<ww:elseif />
if标签的反向执行路径. 换言之, 如果前一个if标签的布尔条件是false且本标签的布尔条件是true的话, 就运算标签主体内容.
迭代标签
<ww:iterator /> 在一个集合(collection)上迭代.
<ww:generator />
生成迭代器(Iterator).
<ww:append />
添加几个迭代器.
<ww:subset />
获取一个迭代器的子集.
<ww:merge />
合并几个迭代器.
<ww:sort />
对迭代器进行排序.
UI标签
UI标签包装了HTML控件以便与核心框架紧密集成. 这些标签设计目标是最小化代码中的逻辑部分, 并用一个模版系统代理最终的HTML绘制. UI标签试图覆盖最普遍的情景(scenario), 并提供了一个component标签以创建定制组件. UI标签还内建支持显示内嵌的
<ww:form /> 所有其他UI标签的容器
<ww:textfield />
创建一个文本框
<ww:password />
创建一个密码输入框
<ww:textarea />
创建一个文本输入域
<ww:checkbox />
创建一个复选框
<ww:select />
创建一个下拉框
<ww:radio />
创建一组单选按钮
<ww:checkboxlist />
创建一组复选框
<ww:label />
创建一个标签
<ww:hidden />
创建一个隐藏域
<ww:doubleselect />
创建一组相关联的下拉框
<ww:combobox />
创建一个下拉输入框(既可以选择下拉框中的选项,也可以自己输入内容)
<ww:component />
创建一个自定义的控件(通过Velocity模版的信息)
国际化标签
<ww:text /> 输出一个经过国际化处理的字符串.
<ww:i18n />
将国际化资源包(resource bundle)放入值栈中, 为text标签使用.
Webwork的表单验证及其国际化
最近突然用到了Webwork的验证和国际化功能,于是翻遍了所有可以翻的地方,把心得写出来给大家分享.
我用的是webwork2.2.2,不同版本之间会有细微的差别,但都是webwork2差别不会很大.先说一下Webwork的验证方式,webwork2.2有如下几种验证方式:
第一种,直接在Action代码里验证.这种方式不值得推崇,因为没法复用,同时由于数据验证代码和真正业务逻辑混在一起,使程序的可读性差,但涉及到复杂的验证,这种直接的验证方式还是有它用武之地的.
第二种,让你的Action Class继承自ActionSupport,即实现validatable接口,在你的Action Class里实现public void validate()方法,覆盖掉其父类里的validate()方法,并让你xwork里的action加入workflow Interceptor,这样此Action Class里的所有的action都会由此validate()方法验证.如果此Action Class里的某个Action不需要验证,则在其xwork配置文件中,别放入workflow Interceptor即可.但此种方法下,该Action Class里的所有的Action方法都经过相同的验证,如果需要不同的验证,则此方法不适用.
第三种,也就是利用Xwork的验证框架来实现,需要建立ActionClassName-alias-validation.xml验证文件,但这 种方式要求强制使用ww标签,不使用ww标签是不能显示错误信息来的.而ww标签通常会把你的布局搞乱,所以这种方式在下不推荐,而且网上有大量的教程介 绍此种方式,所以在下这里不多描述.
以上部分我们介绍了webwork的验证方式.下面我着重介绍一下第2种方式在实际应用中的实现,当然我们提供验证信息的国际化,即通过读取资源文件的方式来提示错误信息,而在下认为第2种方式在实际应用中更加方便,而且受限制的条件也小.下面看具体的例子:
环境:webwork2.2.2
工具:eclipse及propertiesEditor插件
过程:通过访问Action返回一个Velocity的视图,在该视图显示出错误信息!
1.写资源文件(扩展名为properties)
资源文件名前缀要和ActionClass一致,并放于与ActionClass相同的包下,其后跟标准语言标识,假设我们的 ActionClass为UserService,则建立UserService-zh-CN.properties和UserService-en- US.properties,一定要用PropertiesEditor编辑它们,代码如下:
UserService-zh-CN.properties:
java 代码
error.username=请输入用户名
error.password=请输入密码
UserService-en-US.properties:
java 代码
error.username=user name is required
error.password=user password is required
2.写UserService.java文件,代码如下:
java 代码
public class UserService extends ActionSupport
{
private IUser user;
//action 方法,插入用户对象
public String insert() throws Exception
{
//这里省略了具体业务逻辑代码
return SUCCESS;
}
//重载父类里的validate()方法
public void validate()
{
IUser user = this.getUser();
String username = user.getName();
String password = user.getPassword();
if(usename.equals(""))
{
this.addFieldError("username",getText("error.username"));
}
if(password.equals(""))
{
this.addFieldError("password",getText("error.password"));
}
}
//setters and getters
}
3.编写Xwork配置文件:
xml 代码
xml 代码
<action name="insertUser" class="com.davy.UserService" method="insert">
<result name="success" type="velocity">
<param name="location">/success.htmparam>
result>
<result name="input" type="velocity">
<param name="location">/input.htmparam>
result>
<interceptor-ref name="chain"/>
<interceptor-ref name="params"/>
<interceptor-ref name="workflow"/>
action>
需要注意的是workflow Interceptor一定要在Xwork.xml中声明过.
4.编写页面input.htm,注意虽然Velocity的默认扩展名为vm,但我们仍然可以改为htm,Velocity也会支持的.input.htm的代码如下:
xml 代码
<form id="form1" name="form1" method="post" action="insertUser.action">
<input name="user.name" type="text" id="user.name" />$!fieldErrors.username.get(0)
<input name="user.password" type="text" id="user.password" />$!fieldErrors.password.get(0)
<input type="submit" name="Submit" value="提交" />
form>
这样,我们的工作就完成了,接下来就可以在浏览器里测试了,如果浏览器设置为中文,则出现的提示信息问中文,如果浏览器语言设置为英语,则提示信息为英文.例子是简陋了一些,但适用于不使用ww标记的情况.
webwork的国际化资源访问方式
webwork的国际化资源文件可以放在多个位置上:
特定的Action的资源文件ActionName_locale.properties,例如 TestAction_zh_CN.properties
具有共同父类的Action共享的资源文件,定义在父类ActionName_locale.properties,例如 WEB-INF/classes/com/opensymphony/xwork/ActionSupport_zh.properties
全局共享资源文件,由webwork.properties指定资源文件位置,例如在webwork.properties里面定义: webwork.custom.i18n.resources=xwork.application-i18n
那么资源文件在WEB-INF/classes/xwork/application-i18n_zh.properties
资源访问的优先级
按照就近原则,首先寻找当前Action的资源文件,然后寻找Action的父类中的资源文件,最后寻找webwork.properties里面定义的全局共享资源文件。
资源访问方式
首先Action必须继承ActionSupport,因为ActionSupport实现了资源访问接口TextProvider,如果你不希望Action继承ActionSupport,那么必须自己实现TextProvider接口,以获得资源访问能力。
webwork的JSP Tag提供了访问资源的方式,例如:
<ww:text name="title"/>
对于资源文件中包含参数,可以嵌套参数Tag:
<ww:text name="title"> <ww:param>Webwork</ww:param> <ww:param>JSP Tag</ww:param></ww:text>
由于webwork的view访问资源的方式,实际上是通过调用ognlStack堆栈栈顶的action对象的getText(...)方法实现的,所以我们可以直接运用这种方式,例如:
<ww:textfield label="%{getText('title')}" name="username"/>
由于JSP Tag不能嵌套,因此当遇到上面这种情况,需要在Tag里面访问资源的时候,我们就必须采用这种直接通过ognlStack访问action的方式
当我们使用FreeMakrer作为view的时候,两种方式都可以采用
采用Tag方式:
<@ww.text name="title"/><@ww.text name="title"> <@ww.param>webwork</@ww.param> <@ww.param>jsp tag</@ww.param></@ww.text>
采用ognlStack方式:
${action.getText("title")}
对比两种方式:
<@ww.textfield label="%{getText('title')}" name="username" /><@ww.textfield label="${action.getText('title')}" name="username" />
分享到:
相关推荐
WebWork标签库分为多个类别,包括通用标签、组件化标签、流程控制标签、迭代标签、UI标签、VUI标签以及国际化支持标签。 1. **通用标签**: - `<ww:property>`:用于获取结果的属性值,如果未指定值,将从值栈顶部...
以下是对WebWork标签的详细介绍: 1. **通用标签**: - `<ww:property>`:用于获取ActionResult中的属性值,例如`<ww:property name="pname" />`显示Person对象的pname属性值。 - `<ww:param>`:设置父标签的参数...
### WebWork标签库详解 #### 引言 WebWork是一个基于MVC模式的Java Web应用框架,它提供了丰富的标签库来简化页面开发过程。本文将深入解析WebWork标签库中的各类标签,帮助开发者更好地理解和应用这些标签,提高...
你可能会学习到如何安装配置WebWork2环境,创建和运行第一个WebWork应用程序,理解Action和Interceptor的工作原理,以及如何利用WebWork的特性进行表单处理、异常管理和国际化设置等。此外,文档可能还会介绍一些...
3. **使用i18n标签**:在JSP页面中,可以使用WebWork的i18n标签库来显示国际化的消息。例如,`<ww:i18n key="message.key" />`会根据用户的浏览器设置或应用配置,自动选择合适的语言版本。 **动态切换语言** 1. **...
WebWork1.4是该框架的一个较早版本,它为开发者提供了强大的功能,包括动作映射、数据绑定、异常处理、国际化支持以及强大的视图渲染机制。在"webwork-1.4-src.zip"这个压缩包中,包含了WebWork1.4的源代码,这对于...
9. **国际化(Internationalization)**:Webwork2支持多语言环境,允许开发者轻松地为应用添加不同的语言版本。 10. **测试(Testing)**:框架提供了测试工具和API,便于对Action进行单元测试,确保代码的质量和...
7. **国际化与本地化**:WebWork2支持多语言环境,你可以通过简单的配置来实现应用的国际化和本地化,提供不同地区的用户界面。 8. **异常处理**:WebWork2的异常处理机制允许开发者定义全局和特定Action的异常...
1. **WebWork核心库**:这通常包括`webwork-core.jar`,它包含了WebWork的核心功能,如Action调度、请求处理、拦截器和国际化支持。Action是WebWork中的业务逻辑单元,负责处理用户请求。 2. **依赖的IoC容器**:...
WebWork的核心特性包括强大的动作映射、类型安全的参数绑定、异常处理、国际化支持以及对Ajax的友好集成。 1. **模型-视图-控制器(MVC)架构**:WebWork采用MVC模式,将业务逻辑(模型)、用户界面(视图)和数据...
例如,WebWork提供了ActionSupport类,作为Action的基类,提供了错误消息处理、国际化支持等功能。ActionContext是另一个重要的组件,它在每次Action调用时创建,用于获取和设置与请求相关的各种上下文信息,如...
2. **xwork-core.jar**:WebWork2.x版本后,XWork作为其底层动作处理框架,提供了动作执行、类型转换和国际化等功能。 3. **ognl.jar**:Object-Graph Navigation Language,用于对象属性的表达式语言,WebWork中...
- **国际化**:第十四章讨论了国际化支持,包括多语言界面的实现方法。 - **最佳实践**:第十五章总结了一系列在实际开发中应遵循的最佳实践,以提高项目的可维护性和扩展性。 #### 六、附录:WebWork架构 - **...
10. **I18N(国际化)**:WebWork支持多语言,通过资源包提供不同语言的文本,方便进行国际化处理。 11. **异常处理**:WebWork提供了一套完善的异常处理机制,可以自定义错误页面,或者将特定类型的异常映射到特定...
WebWork是一个基于MVC设计模式的Java Web框架,它提供了强大的Action管理、国际化、验证等功能。 然后,配置了两个Servlet:`ServletDispatcher`是WebWork的调度器,处理`.action`请求;`FreemarkerServlet`则负责...
- **国际化与本地化**:支持多语言应用,方便进行国际化配置。 - **异常处理**:优雅地处理应用程序中的异常,提供统一的错误页面和反馈信息。 总的来说,WebWork 2.2 是一个强大且灵活的 Web 开发框架,通过理解并...
- **资源文件**:介绍如何使用资源文件来存储国际化文本。 - **多语言支持**:讨论如何为不同的语言和地区提供本地化的版本。 #### 15. 最佳实践 - **编码规范**:提出一套合理的编码规范,以提高代码的可读性和可...