`
atit
  • 浏览: 34674 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

Struts2 整合 JQuery 开发 Web应用程序

阅读更多
眼下很多Web项目都是选择 Struts2 作为表现层。 在09年底我去过阿里几个部门面试,无一例外都提到了这个框架。

Struts2 能够这么快就让众多程序员放下Struts1的原因在于它的许多更优异的改进之外, 还有一方面就是它的插件体系。

本文要讲的就是运用插件,Struts2可以和Jquery 完美结合。

我假定你已经在你的项目中选择了Struts2,你的项目中会有一些表单需要作前端验证, 比如登录表单, 注册表单等等, 甚至, 你还想加一些Ajax进去, 这一切, Struts2和它的JQuery 插件可以帮你搞定。

Okay, 在讲这些之前, 可以先看看Jquery 插件的 Show case, 以印证我之前提到的所谓的完美。

http://www.weinfreund.de/struts2-jquery-showcase/index.action


接下来我分几个步骤一步步讲如何将Struts2 与 jquery 两者整合。


第一步:引入Struts2-Jquery 插件

如果你的项目是基于Maven开发, 则在你的pom.xml里面加入

		<dependency>
			<groupId>com.jgeppert.struts2.jquery</groupId>
			<artifactId>struts2-jquery-plugin</artifactId>
			<version>2.0.0</version>
		</dependency>






第二步:在表单中使用Jquery 组件画一个日期控件

要用JQuery 画 UI控件, 就要在jsp 页面中引入Jquery 相关的的JS文件, 使和Struts2-Jquery 插件会使这一步变得很简单。

1. 在jsp页面引入 struts2 Jquery 标签, 如下:
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>

2. 在<head></head> 之间加入Jquery头标签, 实际上这个标签的作用就是帮你引入Jquery 的相关js 文件, 同时, 初始化一些配置信息:
<sj:head locale='en' jqueryui="true"/>


3. 在表单里面放入你想放的日期控件, 并打开网页查看效果。

<sj:datepicker id="date0" label="Select a Date" />



第三步: 中文

我相信你在完成第二步的时候已经开始查看你的页面效果了, 你是不是看到了一个日期控件? 可惜它是英文的, 如果你不是在做外包, 估计你还得往下看。


在第二步时, 我在<head></head> 之间加入Jquery头标签已经定义了接下来展示的控件是英文的。

<sj:head locale='en' jqueryui="true"/> 中的 locale='en' 就表示要使用英文展示控件内容, 将它变成 locale='zh_CN' 使表示要展示的是简体中文内容的控件啦。


可是, 别急。 你得注意一下你的网页字符格式, 它是UTF-8吗? 如果是, 恭喜你完工了, 打开网页你就可以看到一个中文化的日期控件。

可是现实很残酷, 在中国的软件公司做中国的项目, 数据库里存的尽是GB2312, 说是为了节省空间, 好像这年头最贵的不是程序员工资而是服务器硬盘。 网页打开的格式也基本要求是GB2312或GBK。


这给Java程序员引入开源带来不少麻烦, 因为老外它就认UTF-8, 在Struts2-JQuery 插件里面存的js格式也是UTF-8的。

在GBK格式的网页里面一引入带中文字符的UTF-8格式的js文件就会出js错误。

办法:

在Struts2-Jquery 插件里面有两个带中文字符的js文件,分别是 template/i18/grid.locale-zh-CN.js 和 template\i18n\jquery.ui.datepicker-zh-CN.min.js 把它们拉出来, 改为GB2312的。 存到class目录的 template/i18n 目录下。 根据class加载顺序, 应当会将class目录下的两个文件载入, struts2-Jquery.jar 目录中的两个js文件会被忽略。



好了, GBK格式的网页的麻烦也没有啦。



第四步:表单验证


服务器当然也可以完成验证工作, 而表单客户端验证其实是变相的把一部分计算让客户端来承担。

打开以下链接, 可以看到Jquery validation 的 Demo
http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Jquery 的验证框架整合到 Struts2 中非常easy.

如下:

在JSP的head 中引入 javascript 文件。

http://IP/app/js/jquery.validate.min.js

另加一段Javacript
  <script>
  $(document).ready(function(){
    $("#formId").validate();
  });
  </script>


假设你的表单项如下:

<form id="formId">
<input type="text" name="username" />
<input type="submit" value="提交" />
</form>


这样就说明, 你的验证框架已经和 fromId 这个表单建立了关联, 假设你想把 表单项 username  设置为必填项, username 表单项改为如下:

<input type="text" name="username" class="required"/>

好了, 这时候,你点击提交按钮的时候便会提示 usrename is required.




第五步: Ajax 提交

struts-jquery 插件提供了ajax 的表单提交按钮。

    <s:form id="form" action="echo" theme="simple" cssClass="yform">
        <fieldset>
            <legend>AJAX Form</legend>
	        <div class="type-text">
	            <label for="echo">Echo: </label>
	            <s:textfield id="echo" name="echo" value="Hello World!!!"/>
	        </div>
	        <div class="type-button">
	            <sj:submit targets="formResult" value="AJAX Submit" />

	        </div>
        </fieldset>
    </s:form>
<div id="formResult"></div>


以上的代码表示提交到服务器之后, 服务器返回的内容将展示到id为formResult的div上。


第六步:整合验证框架与ajax 提交按钮

加了ajax提交按钮之后, 你会发现原有的验证已经不起作用了。 这一点我觉得可能是struts2-jquery插件的一个Bug, 事实上可能是表单在提交之前, 没有去调用onsubmit方法。

不过没有关系, 我们只要在提交之前手工调用一下验证方法即可。

如下:

将之前的
<sj:submit targets="formResult" value="AJAX Submit" />

改为

<sj:submit targets="formResult" value="AJAX Submit" onBeforeTopics="beforeForm"
/>

注册beforeForm逻辑
    $.subscribe('beforeForm', function(event,data) {
		var validatorResult = validator.form();
		if(validatorResult){
			event.originalEvent.options.submit = true;
		}else{
			event.originalEvent.options.submit = false;
		}
    });


这样, 就可以做到提交之前, 先验证一下表单内容啦。


第七步:还是中文

如果你刚好是用utf-8的网页格式, 你不会有任何问题。但如果不是, 则意味着你的表单内容将通过utf-8格式传输到服务器(ajax就是这样子, 即使在tomcat 里面在server.xml 里面将 charset="GBK"也没用)

我之前看到过有博友提到过的解决方案是:

在jsp网页加入如下这一句


	$.ajaxSetup( {  
		beforeSend : function(xhr) {
		  xhr.setRequestHeader('isAjax', 'true');
		}
	});




然后改掉
org/apache/struts2/dispatcher/Dispatcher.java

将 prepare 方法里的第一句改为
        String encoding = null;
		if (request.getHeader("isAjax") != null) {
			encoding = "UTF-8";
			LOG.debug("ajax request");
		} else if (defaultEncoding != null) {
			encoding = defaultEncoding;
		}


整合完成。













1
2
分享到:
评论
3 楼 zuo_huai 2010-06-17  
呵呵…… ,还可以吧
2 楼 atit 2010-06-15  
我写这篇Blog的时候是2.0.0, 现在已经是2.2.0啦。 看来作者是在忽悠呢。
1 楼 yhjhoo 2010-06-14  
我喜欢各自干各自的东西,据说struts2的那个jquery插件作者不打算持续开发。 这个是有一次我在他们的文档上看到的

相关推荐

    struts2整合jquery实现层拖拽即时保存。源码

    在本项目中,"struts2整合jquery实现层拖拽即时保存",指的是利用jQuery的拖放功能(draggable)和Struts2的Action机制,实现在Web页面上拖动层(div或者其他元素)并即时保存其位置信息到服务器。以下是这个项目...

    Struts2整合jQuery实现Ajax功能

    ### Struts2整合jQuery实现Ajax功能 #### 一、引言 随着Web应用程序的发展,用户对交互性和响应速度的要求越来越高。传统的Web表单提交方式已无法满足这些需求,因此Ajax技术逐渐成为提升用户体验的重要手段之一。...

    struts2 整合jQuery 和 json 的全部jar包

    Struts2是一个强大的MVC(模型-视图-控制器)框架,用于构建Java Web应用程序。在Web开发中,Struts2提供了丰富的功能,包括动作调度、数据验证、国际化支持等,使得开发者能够更加高效地组织和管理代码。而jQuery则...

    Struts2整合jQuery实现Ajax功能.doc

    Struts2是一个强大的MVC框架,它为Java开发者提供了构建Web应用程序的结构和控制层。在Struts2中,Action是处理用户请求的核心组件,它接收来自控制器的请求,执行相应的业务逻辑,并返回结果到视图层。jQuery则是一...

    struts2整合jquery例子

    以上是关于"struts2整合jquery例子"中涉及的主要知识点,通过这个例子,你可以学习到如何在实际项目中有效地结合Struts2和jQuery,提升Web应用的开发效率和用户体验。在实践过程中,你还将接触到更多的实际问题,如...

    jquery与struts2整合

    Struts2是一个流行的Java Web框架,用于构建MVC(Model-View-Controller)架构的应用程序。将jQuery与Struts2整合可以使前端与后端的数据交互变得更加高效和便捷。下面我们将详细讲解如何实现这一整合。 **1. 环境...

    Struts2整合jquery利用json与后台交互

    在"strutsJquery"这个压缩包中,可能包含了Struts2整合jQuery的示例代码,包括Action类、JSP页面、配置文件等。通过学习这些示例,你可以更好地理解如何在实际项目中实现Struts2与jQuery的JSON交互。这涉及到前端与...

    jquery和struts2的整合

    而Struts2是一个基于MVC设计模式的Java Web框架,用于构建可维护性和可扩展性高的应用程序。将jQuery与Struts2整合,可以充分利用两者的优势,提供更流畅的用户界面和高效的后端处理。 **1. 整合步骤** (1) **引入...

    struts2整合jquery

    在Struts2框架中整合jQuery,我们可以实现更高效和流畅的Web应用交互,尤其是通过Ajax进行异步数据提交和对象列表展示。以下是整合过程的详细步骤及知识点: 首先,我们需要确保具备以下环境: 1. Struts2框架版本...

    整合了struts2 jquery的formValidator表单验证的页面代码

    Struts2是一个强大的MVC框架,用于构建企业级的Web应用程序,而jQuery则是一个高效的JavaScript库,简化了DOM操作、事件处理以及Ajax交互。在本项目中,我们关注的是将这两者结合使用,实现基于jQuery的...

    Struts2整合jQuery实现Ajax功能_demo

    本文将详细解析如何通过Struts2框架整合jQuery来实现Ajax功能,具体涉及的知识点包括:Struts2框架基础、jQuery库的应用、Ajax原理以及具体的代码示例分析。 ### Struts2框架基础 Struts2是一个基于MVC(Model-...

    struts2-jquery-plug ShowCase

    在这个"struts2-jquery-plug ShowCase"项目中,开发者展示了如何在Struts2应用中集成jQuery插件,以增强用户界面和交互体验。FHP(Full Hibernate Plug)是针对Hibernate的一个插件,用于简化数据持久化操作,将...

    struts2下jquery-ui的全部实例

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它被广泛应用于Java Web开发中,提供了优雅的方式来组织和控制应用程序的行为。jQuery UI则是一个基于jQuery库的用户界面插件集合,提供了多种可交互的UI组件,如...

    struts2+json+jquery实现ajax数据的存取

    Struts2是基于Model-View-Controller(MVC)设计模式的Java Web应用框架,用于简化和规范大型应用程序的开发。它提供了一种组织和控制应用程序逻辑的方式,使开发者可以更专注于业务逻辑而不是底层的HTTP请求处理。...

    struts2+jquery实例

    Struts2和jQuery是两种非常流行的Java Web开发技术,它们在构建动态、交互式的Web应用程序中发挥着重要作用。Ajax(Asynchronous JavaScript and XML)则是一种让网页实现异步更新的技术,而Spring是一个全面的Java...

    JQuery EasyUI 整合struts2 代码下载

    标题 "JQuery EasyUI 整合struts2 代码下载" 涉及到的是一个Web开发中的技术组合,主要集中在前端的JQuery EasyUI框架与后端的Struts2框架的集成应用。JQuery EasyUI是一个基于jQuery的UI库,提供了丰富的组件,如...

    struts jquery

    总结来说,"struts jquery"组合意味着在Struts 2框架下使用jQuery进行前端开发,通过Struts 2的控制器层和jQuery的客户端功能,实现高效、交互性强的Web应用。压缩包中的"struts2+jQuery所需jar包"应该是包含了...

    使用struts2+JQuery实现的简单的ajax例子

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中被广泛应用。结合jQuery,一个轻量级、高效的JavaScript库,可以实现动态、异步的数据交互,即Ajax(Asynchronous JavaScript and XML)技术,...

    jquery.validate 与 struts2的整合使用

    整合jQuery Validate和Struts2的步骤如下: 1. **引入依赖**:在HTML文件中引入jQuery、jQuery Validate及相应的CSS样式文件,同时确保Struts2的库已添加到项目类路径中。 2. **配置Struts2**:在struts.xml配置...

Global site tag (gtag.js) - Google Analytics