用登陆演示
Model-Driven(模型驱动)
、配置表单验证
本文主要在上一个视频(webwork初体验)的基本进行改动,所以在看本文之前,请先浏览上一个视频。
在
webwork
中
Action
根据
Form
的不同可分为二类:
一种是
Field-Driven
(字段驱动)
Action
;就是
Action
用自己的字段来充当
Form
的角色,上一个视频给大家演示的例子就是采用了这种方式。本人感觉有点像
struts
中的动态
Form
。
当然这只是我自己的一些看法。还有一种是
Model-Driven
(模型驱动)
Action
。它很像
Struts
的
Form,
但在
struts
中
Form
必须继承
org.apache.struts.action.ActionForm;
或是
org.apache.struts.validator
包下的几个
Form.
在
WebWork
中有所不同,只要普通
JavaBean
就可以充当模型部分
。只要我们在
Action
中实现
com.opensymphony.xwork. ModelDriven
接口就可以了,它有一个方法:
Object getModel();
,这个方法用于返回模型对象。
我们改动上个视频的
LoginAction
类。代码如下:
java 代码
- package com.lyx.web.action;
- import com.lyx.bo.User;
- import com.opensymphony.xwork.Action;
- import com.opensymphony.xwork.ActionSupport;
- import com.opensymphony.xwork.ModelDriven;
- public class LoginAction implements Action,ModelDriven {
-
- private User user=new User();
-
- public User getUser() {
- return user;
- }
- public String execute() throws Exception {
- if(user.getUserName().equals("lyx")){
- return this.SUCCESS;
- }else{
- return this.ERROR;
- }
- }
- public Object getModel() {
-
- return user;
- }
-
- }
红色字体部是我们后加部分。
然后我们就可以将
index.jsp
页面的代码修改如下:
<
form
action
=
"login.action"
>
username:
<
input
type
=
"text"
name
=
"userName"
/>
password:
<
input
type
=
"password"
name
=
"userPwd"
/>
<
input
type
=
"submit"
value
=
"login"
/>
form>
也就是我们去掉了原有的表达式语言。
然后我们修改xwork.xml配置文件如下:
xml 代码
- <!---->>
- <xwork>
- <include file="webwork-default.xml" />
- <package name="default" extends="webwork-default">
- <action name="login" class="com.lyx.web.action.LoginAction">
-
- <result name="success" type="dispatcher">
- <param name="location">/success.jspparam>
- result>
-
- <result name="error" type="dispatcher">
- <param name="location">/error.jspparam>
- result>
- <interceptor-ref name="model-driven"/>
- <interceptor-ref name="params"/>
- action>
- package>
- xwork>
也就是在原有的基础上加了一行模型驱动的拦截器。作用就是将模型对象保存到值堆栈中。
就样就OK了。
这里要注意,
model-driven
拦截器要在
params
的上面。可以测试一下看看。
整过过程,非常像struts中,Action与ActionForm的关系。
通过测试,功能和以前的一样。很简单吧。就不在多述了。
第二个重点我们来配置一个表单的验证:
在 src 目录下新建
validators.xml
文件,文件内容如下:
xml 代码
- <validators>
- <validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
- <validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>
- <validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
- <validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
- <validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
- <validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
- <validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
- <validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
- <validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
- <validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
- <validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
- validators>
这个文件可以在网上下得到。也可以在
webwork
的源码中得到。不是不想起了
struts
中有个
valiator-rules.xml
文件。这个文件在
struts
中是描述着验证的规则,里面有好多已经写好了的验证,我们可以很方便的调用。这里的这个文件功能和
struts
中的类似。
要启动表单验证
,
需要增加一个拦截器
,
还有就是我们在
struts
的
struts-config.xml
配置文件中Action的配置有个input属性,它是用来当验证失败时所在跳到的页,在这里如果登陆失败我们应该跳到index页,显示失败的原因,重新登陆。在webwork中我们也用input来描述这个功能。在一个result.
对
xwork.xml
文件进行修改
,
增加
<
interceptor-ref
name
=
"
validationWorkflowStack
"
/>
修改后
xwork.xml
代码如下:
xml 代码
- <include file="webwork-default.xml" />
- <package name="default" extends="webwork-default">
- <action name="login" class="com.lyx.web.action.LoginAction">
-
- <result name="success" type="dispatcher">
- <param name="location">/success.jspparam>
- result>
-
- <result name="error" type="dispatcher">
- <param name="location">/error.jspparam>
- result>
- <result name="input" type="dispatcher">
- <param name="location">/index.jspparam>
- result>
-
- <interceptor-ref name="model-driven"/>
- <interceptor-ref name="params"/>
- <interceptor-ref name="validationWorkflowStack" />
- action>
- package>
我们已经用到了
success
,他指成功所要跳到的页。
Error
是错误所要跳到的页。
Input
是指失败时所要返回来登陆的页。在
webwork
中还有几个。以后我们会看得到,用到的时候在详细讲解。
建立验证规则
对
LoginAction
进行验证规则的配置
,
需要新建一个配置文件
,
文件名起名是以
Action
的名称开头以
validation
结尾,中间用
”
-
”
隔开.xml
并保存到
LoginAction.java
文件所在的目录中
代码如下: LoginAction-validation.xml
xml 代码
- <!---->>
- <validators>
- <field name="userName">
- <field-validator type="requiredstring">
- <message>username is required!message>
- field-validator>
- field>
- <field name="userPwd">
- <field-validator type="requiredstring">
- <message> password is required!message>
- field-validator>
- field>
- validators>
这个文件很像
struts
中的
validation.xml
。功能和他是一样的。配置表单的验证。这里我们只验证也用户名和密码为必须填写。注意:这个
name
的属性一定要和
User
类中的对应。规则是和
struts
中一样的。对应才能有交的验证。
为了能显示验证的信息再次修改
index
页面如下:
<
ww:form
action
=
"login.action"
method
=
"POST"
>
username:
<
ww:textfield
label
=
"Username"
name
=
"userName"
required
=
"true"
/>
password:
<
ww:password
label
=
"Password"
name
=
"userPwd"
required
=
"true"
/>
<
ww:submit
value
=
"Submit"
/>
ww:form>
这几行很简单,从字面上就可以看出,就不在多述了。
基本代码就这些,测试一下,看看吧。
哦,没有验证,还忘了一步,回头看看
除了上述的配置外,我们的
Action
还要继承
ActionSupport类,这个类存放着错误的信息,并能将错误的状态返回到页面
在改一下,试试
OK了。好用了。呵呵,刚是太急用了,忘了最关键的一步。大家在开发当中可以细心点啊。
因为,录这个视频是在公司,不能有声音讲解给大家听。请大家谅解。这段时间比较忙,过了这段时间,给大家录个有声音的。呵呵。
我的联系方式:
就到这里吧。希望大家能多提宝贵意见!