`
san_yun
  • 浏览: 2602169 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

webwork2入门(二.2)

阅读更多

在web应用经常需要要对用户提交的表单进行验证

webwork有3种验证方式:

客户端验证

服务器端验证

Ajax验证:

下面来探讨最简单的服务器端验证

webwork通过实现com.opensymphony.xwork.Validateable 和 com.opensymphony.xwork.ValidationAware接口提供验证功能,通常我们不会自己去实现这两个接口,而是通过继承com.opensymphony.xwork.ActionSupport这个类。

来看我们Action的变化

java 代码
  1. package mypackage;   
  2.   
  3. import java.util.Map;   
  4.   
  5. import com.opensymphony.xwork.ActionContext;   
  6. import com.opensymphony.xwork.ActionSupport;   
  7. import com.opensymphony.xwork.Validateable;   
  8. public class SimpleAction extends ActionSupport implements Validateable {   
  9.   
  10.     private User user = new User();   
  11.        
  12.     public String execute() throws Exception {   
  13.        
  14.         ActionContext context = ActionContext.getContext();   
  15.         Map session = context.getSession();   
  16.         session.put("user", user);   
  17.         user.getMessage().add("msg1");   
  18.         user.getMessage().add("msg2");   
  19.         user.getMessage().add("msg3");   
  20.            
  21.         return SUCCESS;   
  22.     }   
  23.   
  24.     public User getUser() {   
  25.         return user;   
  26.     }   
  27.   
  28.     public void setUser(User user) {   
  29.         this.user = user;   
  30.     }   
  31.   
  32.     public void validate() {   
  33.         if("java".equals(user.getUsername())){   
  34.             this.addFieldError("username""username can't become java");   
  35.         }   
  36.     }   
  37.        
  38.   
  39. }   

如果我们的用户名为 java 的话就向客户端发送一段失败警告:

其中的addFieldError方法是从ActionSupport继承来的,第一个参数表示的是域(field)名,第二个参数表示的是出错信息.

一件奇怪的事是execute方法并没有显示调用validate方法,validate方法怎么运行,它总不可能自动运行吧

答案是通过拦截器

我们的xwork.xml将作如下变化:

xml 代码
  1. <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">  
  2. <xwork>  
  3.     <include file="webwork-default.xml" />  
  4.     <package name="default" extends="webwork-default">  
  5.         <action name="simple" class="mypackage.SimpleAction">  
  6.             <result name="success" type="redirect">success.jsp</result>  
  7.             <result name="input">index.jsp</result>  
  8.             <interceptor-ref name="params" />  
  9.             <interceptor-ref name="validation"/>  
  10.             <interceptor-ref name="workflow"/>         
  11.         </action>  
  12.     </package>  
  13. </xwork>  

新增两个拦截器 validation 和 workflow,第一个拦截器增加了验证的功能,第二个拦截器会改变action拦截器的运行顺序,具体是:先执行 validate()方法,让后调用hasFieldErrors()方法检查是否有错误,如果有直接返回input,而不再执行余下的action.

index.jsp将会做如下变化

xml 代码
  1. <%@taglib prefix="ww" uri="/webwork" %>  
  2. <html>  
  3. <body>  
  4. <div style="color: red"><ww:fielderror />div>  
  5. <form action="simple.action">  
  6. <input type="text" name="user.username"><br>  
  7. <input type="password" name="user.password"><br>  
  8. <input type="submit" value="submit">  
  9. form>  
  10. body>  
  11. html>  

增加一个捕获错误的标签:

  1. <ww:fielderror />  

 

其余部分都不会变化

效果图:

分享到:
评论
7 楼 lijie250 2007-05-02  
我也觉得这个版块多搞点入门的东西,这个就不错,高手都是一个过程!!
6 楼 rainlife 2007-05-01  
其实这些入门的文章,在官方提供的References里面都已经有了,只是很多是英文的,很少人愿意去看罢了,opendoc的webwork指南里面也存在与楼主类似的示例。
5 楼 san_yun 2007-05-01  
4 楼 bluemn2000 2007-04-10  
:D我也觉得很好,在这个网站浏览了这么久,这还是对我这个初学者来说能看得懂的为数不多的文章之一,我支持LZ!! 
3 楼 dcheng 2007-04-10  
对我们初学者来说,我觉得这个教程写的很不错,可以让我们很快的入门,高手可以写一些高级的东西,可以让我们站在你们的肩上:)
2 楼 san_yun 2007-03-26  
我一直认为,学过的东西,不让它忘掉最好的办法就是把脑子里理解的东西再写出来,这是我自己给自己学的教程,如果上面的朋友知道的更多,何不写出来给我们这些初学者铺上一条红地毯
1 楼 kjhot 2007-03-22  
应该弄些高级的东西,大家都知道的其实不用重复说来说去!

相关推荐

Global site tag (gtag.js) - Google Analytics