用登陸演示
Model-Driven(模型驅動)、配置表單驗證
本文主要在上一個視頻(webwork初體驗)的基本進行改動,所以在看本文之前,請先瀏覽上一個視頻。
在webwork中Action根據Form的不同可分為二類:
一種是Field-Driven(字段驅動)Action;就是 Action用自己的字段來充當Form的角色,上一個視頻給大家演示的例子就是采用了這種方式。本人感覺有點像struts中的動態(tài)Form。
當然這只是我自己的一些看法。還有一種是Model-Driven(模型驅動)Action。它很像Struts的Form,但在struts中Form必須繼承org.apache.struts.action.ActionForm;或是org.apache.struts.validator包下的幾個Form.在WebWork中有所不同,只要普通JavaBean就可以充當模型部分。只要我們在Action中實現(xiàn)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 代碼
- <!--CTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd"</sp-->>
- <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中是描述著驗證的規(guī)則,里面有好多已經寫好了的驗證,我們可以很方便的調用。這里的這個文件功能和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中還有幾個。以后我們會看得到,用到的時候在詳細講解。
建立驗證規(guī)則
對 LoginAction 進行驗證規(guī)則的配置,需要新建一個配置文件,文件名起名是以Action 的名稱開頭以validation結尾,中間用”-”隔開.xml并保存到 LoginAction.java 文件所在的目錄中
代碼如下: LoginAction-validation.xml
xml 代碼
- <!--CTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd"</sp-->>
- <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類中的對應。規(guī)則是和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類,這個類存放著錯誤的信息,并能將錯誤的狀態(tài)返回到頁面
在改一下,試試
OK了。好用了。呵呵,剛是太急用了,忘了最關鍵的一步。大家在開發(fā)當中可以細心點啊。
因為,錄這個視頻是在公司,不能有聲音講解給大家聽。請大家諒解。這段時間比較忙,過了這段時間,給大家錄個有聲音的。呵呵。
我的聯(lián)系方式:
Email:Lyx_happy@163.com
就到這里吧。希望大家能多提寶貴意見!
webwork模型驅動與表單驗證.part1.rar |
描述: |
第一部分視頻 |

下載 |
文件名: |
webwork模型驅動與表單驗證.part1.rar |
文件大小: |
3 M |
下載過的: |
文件被下載或查看 1277 次 |
webwork模型驅動與表單驗證.part2.rar |
描述: |
第二部分視頻 |

下載 |
文件名: |
webwork模型驅動與表單驗證.part2.rar |
文件大小: |
3 M |
下載過的: |
文件被下載或查看 1101 次 |
webworkfirst.rar |
描述: |
程序源碼 |

下載 |
文件名: |
webworkfirst.rar |
文件大小: |
8 KB |
下載過的: |
文件被下載或查看 350 次 |