- 浏览: 440922 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (162)
- easymock (3)
- 模板引擎 (3)
- JForum (4)
- web (9)
- spring (10)
- java (20)
- struts (9)
- uml (3)
- java pattern (19)
- JQuery (14)
- 多线程 (13)
- database (21)
- PS (3)
- ejb (6)
- 版本管理 svn , maven , ant (2)
- protocol (1)
- 测试 (1)
- ws (7)
- Apache (4)
- 脚本语言 (1)
- guice (1)
- 分布式 (4)
- 架构 (0)
- 经验 (1)
- 版本管理 svn (1)
- maven (1)
- ant (1)
- 书籍 (1)
- Linux (1)
最新评论
-
Master-Gao:
稍微明白了点,,有点萌萌哒
为什么匿名内部类参数必须为final类型 -
waw0931:
终于明白了,谢谢!
为什么匿名内部类参数必须为final类型 -
十三圆桌骑士:
提供了两个链接还是有用的。
安装Mondrian -
放方芳:
[flash=200,200][/flash]
Freemarker标签使用 -
放方芳:
[b][/b]
Freemarker标签使用
1.目标
在基于Struts2的应用中,利用AJAX方式提交表单实现一个登陆验证Action,将服务器端验证结果展现在页面上
字段错误展示:
action 错误提示
2.技术实现
利用struts2-jquery插件和struts2-json插件实现
3.实现步骤
3.1依赖jar包
除了struts2-core-2.2.3.jar包以外,还要下载两个jar包
struts2-jquery-plugin-3.1.0.jar
struts2-json-plugin-2.2.3.jar
3.2编写登陆处理类Action
这个Action和我们普通的Action没有任何区别
- package com.crazycoder2010.struts2;
- import com.opensymphony.xwork2.ActionSupport;
- public class LoginAction extends ActionSupport {
- private static final long serialVersionUID = 6627313805146336838L;
- private String name;
- private String password;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- @Override
- public String execute() throws Exception {
- if(!("Kevin".equals(this.name)&&"111111".equals(this.password))){
- this.addActionError("Wrong!");
- }
- return INPUT;
- }
- }
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
- <validators>
- <field name="name">
- <field-validator type="requiredstring">
- <param name="trim">true</param>
- <message>Name is required.</message>
- </field-validator>
- <field-validator type="stringlength">
- <param name="minLength">2</param>
- <param name="maxLength">60</param>
- <message>Name must be between ${minLength} and ${maxLength} characters long.</message>
- </field-validator>
- </field>
- <field name="password">
- <field-validator type="requiredstring">
- <param name="trim">true</param>
- <message>Password is required.</message>
- </field-validator>
- <field-validator type="stringlength">
- <param name="minLength">2</param>
- <param name="maxLength">60</param>
- <message>Password must be between ${minLength} and ${maxLength} characters long.</message>
- </field-validator>
- </field>
- </validators>
这个Action的配置有些特殊,注意
a.package需要继承自json-default包
b.action的拦截器引用jsonValidationWorkflowStack
c.result的type类型为json
d.配置该action需要转化成json对象的字段includeProperties
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="default" extends="json-default">
- <action name="login" class="com.crazycoder2010.struts2.LoginAction">
- <interceptor-ref name="jsonValidationWorkflowStack"></interceptor-ref>
- <result name="input" type="json">
- <param name="ignoreHierarchy">false</param>
- <param name="includeProperties">actionErrors\[\d+\], fieldErrors\..+$, actionMessages\[\d+\]</param>
- </result>
- </action>
- </package>
- </struts>
a.将struts2-jquery的taglib引入页面中
b.在<head>元素中通过<sj:head/>标签引入jquery的css和js文件(这些文件都压缩在struts2-jquery-plugins.jar包中,因此不需要单独下载jquery相关的js了)
c.提交submit按钮改用struts2-jquery插件中的
<sj:submit onCompleteTopics="complete" --在服务器端处理完毕将结果返回到页面时所触发的javascript函数
targets="result" --用来展示结果的容器ID列表,以','分割
onBeforeTopics='clearError' --在将数据提交到服务器端以前所触发的javascript函数,如做一些客户端的验证错误提示信息的清除
返回json结果字符串示例:
{"actionErrors":[],"actionMessages":[],"fieldErrors":{"name":["Name is required."],"password":["Password
is required."]}}
- <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
- <%@ taglib prefix="s" uri="/struts-tags"%>
- <%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <style type="text/css">
- .errorLabel{color: red;}
- </style>
- <sj:head jquerytheme="cupertino" ajaxcache="false" compressed="false"/>
- </head>
- <body>
- <s:form action="login" method="post" theme="simple" namespace="/">
- <ul id="errorMessages"></ul>
- <p>User Name:</p>
- <p><input name="name"/><span id="error_name"></span></p>
- <p>Password:</p>
- <p><input type="password" name="password"/><span id="error_password"></span></p>
- <sj:submit
- onCompleteTopics="complete"
- targets="result"
- onBeforeTopics="clearError"
- value="Login"/>
- </s:form>
- <script type="text/javascript">
- $.subscribe('clearError', function(event,data) {
- $("#errorMessages").html("");
- $('.errorLabel').html('').removeClass('errorLabel');
- });
- $.subscribe('complete', function(event,data) {
- $("#errorMessages").html("");//先将上次认证的错误消息清除掉
- $('.errorLabel').html('').removeClass('errorLabel');
- var json = $.parseJSON(event.originalEvent.request.responseText);
- if(json.actionErrors && json.actionErrors.length>0){//判断有没有actionErrors
- $.each(json.actionErrors,function(index,data){
- $("#errorMessages").append("<li>"+data+"</li>");
- });
- return;
- }
- if(json.fieldErrors && !isEmpty(json.fieldErrors)){//判断有没有fieldError(LoginAction-validation.xml验证错误)
- $.each(json.fieldErrors,function(index,value){//index就是field的name,value就是该filed对应的错误列表,这里取第一个
- $("#error_"+index).html(value[0]);
- $("#error_"+index).addClass("errorLabel");
- });
- return;
- }
- alert("登陆成功");//既没有actionError有没有fieldError则登陆成功
- });
- function isEmpty(obj){//判断对象是否为空(处理Object obj = {}这种情况认为isEmpty=true)
- for(var p in obj){
- return false;
- }
- return true;
- }
- </script>
- </body>
发表评论
-
js this理解
2015-01-22 16:23 527http://www.jb51.net/article/162 ... -
jquery小技巧
2012-12-21 16:38 7511.怎么访问js函数里面的函数? 1.re ... -
如何写jquery插件
2012-10-16 16:06 848参考一下链接: http://www.cnblogs. ... -
js 闭包
2012-10-16 15:50 953我的博客里面已经有好几篇介绍java script closu ... -
js 方法调用
2011-10-27 17:32 1205英文原版: http://devlicio.us/blogs/ ... -
validationEngine 结合struts2 ajax验证
2011-10-26 14:36 1517项目中用到validation Engine 和 stuts2 ... -
jquery处理带有特殊字符的id
2011-10-26 14:30 7949所以id最好不要取名有 “.”、“#”、“(”、“[” ... -
struts2 json
2011-10-26 14:29 1255为了方便ajax调用传输数据,在struts2中加入的js ... -
js 闭包
2011-10-24 22:51 1190最近在网上查阅了 ... -
jquery 验证框架
2011-10-19 18:22 16037Jquery validate 验证 具体查看附件中demo ... -
javascript面向对象技术基础
2011-08-22 16:40 890看了很多介绍javascript面向对象技术的文章,很晕.为什 ... -
Javascript的匿名函数
2011-08-22 14:19 856Javascript的匿名函数 一、什么是匿名函数? ... -
JQuery原型
2011-05-23 11:20 3120在 JavaScript 中,每个函 ...
相关推荐
·Struts 2.0中实现表单数据校验(Validation) ·拦截器(Interceptor) ·Struts 2中实现IoC ·Struts 2中实现文件上传 ·Struts 2中的OGNL ·Strus 2的新表单标签的使用 ·Struts 2与AJAX ·Struts2分页 ...
06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 Struts 2的...
06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新...
在Struts 2.0中实现表单数据校验(Validation) Struts 2的基石——拦截器(Interceptor) 在Struts 2中实现IoC 在Struts 2中实现文件上传 在Struts 2中实现CRUD Struts 2中的OGNL Strus 2的新表单标志的使用 ...
06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新...
Struts 2的基石——拦截器(Interceptor);在Struts 2_0中国际化(i18n)您的应用程序;在Struts 2_0中实现表单数据校验(Validation);Struts 2与AJAX;在Struts 2中实现IoC......
表单校验: avlidation包: LocaleConverter.java Locales.java ValidationHWorld.java globalMessage_en_US.properties globalMessage_zh_CN.properties struts.properties xwork-conversion.propertie ...
244、客服端调用EJB对象的几个基本步骤 56 245、 如何给weblogic指定大小的内存? 56 246、如何设定的weblogic的热启动模式(开发模式)与产品发布模式? 57 247、如何启动时不需输入用户名与密码? 57 248、在weblogic...
244、客服端调用EJB对象的几个基本步骤 56 245、 如何给weblogic指定大小的内存? 56 246、如何设定的weblogic的热启动模式(开发模式)与产品发布模式? 57 247、如何启动时不需输入用户名与密码? 57 248、在...