`

dwr和json的结合

阅读更多
  在权限分配认证操作中使用了dwr为了方便操作.但是设置是每次点击checkBox就会改变角色的认证...后来老总说这个操作好像不大好进行了大幅度的修改.后来逼着使用json来传递参数..不过自己写的这个方法通用性不强..这里只是讲解下利用json作为参数传递数据的过程吧...
首先到http://sourceforge.net/projects/json-lib/files/
下载json在java后台转换的辅助包.
这包提供了 JSONObject json = JSONObject.fromObject(map);
将一些对象转换为JSONObject的对象.JSONObject调用toString()将会变成json格式的数据.下面有个测试类可以看看效果
package ajax.json.start;

import junit.framework.Assert;
import net.sf.json.JSONArray;

import org.junit.Test;

public class ArrayTestCase {

	private String string = "[true,false,true]";
	private boolean[] array = new boolean[] { true, false, true };

	@Test
	public void testToJson() {
		JSONArray json = JSONArray.fromObject(array);
		String s = json.toString();
		Assert.assertEquals(string, s);
	}
	
	@Test
	public void testToArray() {
		JSONArray json = JSONArray.fromObject(string);
		Object[] objs = (Object[]) JSONArray.toArray(json);
		for (int i = 0; i < array.length; i++) {
			Assert.assertEquals(((Boolean) objs[i]).booleanValue(), array[i]);
		}
	}
}



由于我的项目javascript内容比较多.我就截取一些代码进行说明
由于html也是使用dom解析的..所以我们可以在其上面进行一些属性添加和赋值再从javascript中获取到相应的值

1.配置dwr.
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>true</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>
</web-app>

dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
  <allow>
<!--new: 用Java的new关键字创造对象。 -->
    <create creator="new" javascript="test">
  	<param name="class" value="com.json.Test"/><!--对应的类-->
	</create>
    <convert match="com.json.SubBean" converter="bean"><!--传输的对象.这里没有使用到.就做到解析-->
    	<param name="include" value="id,name"></param>
    </convert>
    
  </allow>
</dwr>

2.编写获取json数据进行解析的类
package com.json;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;



public class Test {
	public void saveOrUpdate(String jsonArray) {
		JSONArray json = JSONArray.fromObject(jsonArray);//获取到数组字符串进行转换数组对象
		Object[] objs = (Object[]) JSONArray.toArray(json);//转换为数组
		for (int i = 0; i < objs.length; i++) {
			JSONObject obj = JSONObject.fromObject(objs[i]);//存放的数据进行对象转换
			SubBean subBean = (SubBean) JSONObject.toBean(obj,SubBean.class);//转换为相应的对象进行参数的提取
			System.out.println("SubBean id:"+subBean.getId()+"name:"+subBean.getName());
		}
	}
}


3.页面的编写
<%@ page pageEncoding="gb2312" contentType="text/html; charset=gb2312"%>
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>check</title>
    <script type="text/javascript" src="${pageContext.request.contextPath }/dwr/engine.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/dwr/util.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/dwr/interface/test.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath }/js/json2.js"></script>
    <script type="text/javascript">
    var temp = [];//临时存放json对象的数组.因为浏览器兼容问题最好使用[]
    function saveOrUpdate(field) {
    	var subBean = {id:"",name:""};//SubBean对应的json形式
    	subBean.id = parseInt(field.id);//因为SubBean的id是整型的.所以要先做转换才能正确的赋值.其他类型也一样操作
    	subBean.name = field.getAttribute("name");//对于自己添加到属性因为浏览器兼容问题要统一使用getAttribute()。
    	temp.push(subBean);
    }
   function  referData(){
    test.saveOrUpdate(JSON.stringify(temp));//将存放json对象的数组变成字符串形式进行添加到后台.
    }
    </script>
  </head>
  
  <body>
  <table>
  <tr>
  <td>
	<span id="C_Color"><input type="checkbox"  id="0" onclick="saveOrUpdate(this)" name="C"></span>C
	<span id="R_Color"><input type="checkbox" id="1" onclick="saveOrUpdate(this)" name="R"></span>R
	<span id="U_Color"><input type="checkbox" id="2" onclick="saveOrUpdate(this)" name="U"></span>U
	<span id="D_Color"><input type="checkbox" id="3" onclick="saveOrUpdate(this)" name="D"></span>D
	</td>
  </tr>
  <TR align="center">
			<TD colspan="3" bgcolor="#EFF3F7">
			<input type="button" class="MyButton"
				value="提交数据" onclick="referData()">
				<input type="button" class="MyButton"
				value="关闭窗口" onclick="closeWindow()">
			</TD>
		</TR>
  </table>
  </body>
</html>



总结:这里使用json使得一些数据传输可以更灵活的使用.不过也导致了前台js操作数据过多.对自己所遇到的实际情况进行选择...还有在火狐中checkbox的style设置颜色是没有效果的.所以在点击checkbox想设置颜色的话.就加个span上去或者修改字体颜色达到效果
分享到:
评论

相关推荐

    dwr + json简单分页

    通过这种方式,我们实现了DWR与JSON的结合,创建了一个简单的无刷新分页功能。用户可以在不刷新页面的情况下加载更多数据,提高了交互性和性能。注意,实际应用中还需要考虑错误处理、参数校验、安全问题等。此外,...

    dwr的使用返回json

    总之,DWR结合JSON提供了一种强大的方式,使得Web应用可以无缝地在客户端和服务器之间交换数据。通过理解DWR的配置、Java方法的定义以及客户端的调用机制,你可以有效地利用这种技术构建出高效的Ajax应用。

    不妨看看我用dwr和json完成简单分页-jsp dwr分页(mssqlserver2005)

    这个过程展示了如何利用DWR的实时通信能力,结合JSON的高效数据交换,实现JSP页面上的动态数据分页,同时利用SQL Server 2005的数据库查询功能,优化了数据检索效率。通过这种方式,用户可以在不刷新页面的情况下...

    dwr与反射相结合案例

    在这个“dwr与反射相结合”的案例中,我们将深入探讨如何利用DWR的灵活性和Java反射机制来增强Web应用的功能。 DWR的核心功能是提供一种安全、高效的方式,使得JavaScript可以调用服务器上的Java方法,就像是本地...

    Spring与DWR结合

    DWR自动处理JSON或XML数据的序列化和反序列化,以及跨域问题,让开发者能够专注于业务逻辑,而非底层实现。 将Spring与DWR结合,可以充分利用两者的优势。Spring可以作为服务层的容器,管理Bean的生命周期和依赖...

    json jquery dwr 个人测试

    在"json jquery dwr 个人测试"项目中,可能是在探索如何将这三者有效地结合使用。首先,开发者可能会使用jQuery来处理DOM元素,响应用户交互,并发起Ajax请求。当用户触发某个操作时,jQuery会发送一个HTTP请求到...

    jquery autocomplete dwr结合 修改Data

    结合jQuery Autocomplete和DWR,开发者可以在用户输入时通过DWR异步调用服务器上的Java方法,获取匹配的数据,然后将这些数据填充到Autocomplete的建议列表中。这种结合的优点是减少了页面刷新,提供了更流畅的用户...

    dwr和ajax使用demo

    【DWR(Direct Web Remoting)与Ajax技术详解】 DWR(Direct Web Remoting)是一种在Web应用程序中...理解并掌握DWR和Ajax的结合使用,能够极大地提升你的Web开发能力,让你能构建出更加高效、用户体验优良的应用。

    DWR与界面开发 资料大全

    2. **构建富客户端应用**:结合DWR和JavaScript库(如jQuery)创建复杂的交互式用户界面。 3. **优化性能**:了解如何优化DWR的性能,如缓存策略、压缩传输等。 七、DWR与其他技术的结合 1. **与AJAX库的协作**:...

    ext 与 dwr 的结合

    DWR通过自动处理JSON或XML数据交换,简化了客户端和服务器之间的交互。 将EXTJS与DWR结合,可以创建出高度交互性和动态的Web应用。EXTJS负责前端的用户界面展示和交互,而DWR则负责提供后端服务,实现实时的数据...

    dwr2.0 dwr3.0 jar包

    在这个版本中,DWR提供了一套全面的API,包括自动转换Java对象到JSON格式,以及处理安全性和并发性问题。此外,DWR 2.0支持自动刷新,这意味着当服务器端的Java类或方法发生变化时,无需重新加载页面,客户端的...

    dwr ajax完整示例,内有dwr配置说明文档,sql脚本

    标题中的“dwr ajax完整示例”指的是Direct Web Remoting (DWR) 技术与AJAX(Asynchronous JavaScript and XML)的结合应用。DWR是一种开源Java库,它允许Web应用程序在浏览器和服务器之间安全地进行双向通信,使得...

    DWR中文教程(外带DWR包)

    DWR通过AJAX(异步JavaScript和XML)技术实现这一点,但并不局限于XML,它还支持JSON和其他数据格式。这种双向通信能力使得开发人员可以创建更加动态和响应式的用户界面。 在提供的“dwr教程.pdf”中,你可能会学习...

    DWR整合Spring MVC

    **DWR整合Spring MVC**是将Direct Web Remoting (DWR)框架与Spring MVC结合使用,以实现前端JSP页面直接调用后端Java方法的功能。这种整合方式极大地提高了Web应用的交互性和实时性,降低了数据传输的复杂性。本文将...

    DWR与SPRING 集成

    DWR通过自动处理JSON或XML数据交换、安全性和缓存策略,简化了客户端和服务器端的交互。 2. **Spring框架**: Spring是一个全面的企业级应用开发框架,它提倡依赖注入(DI)和面向切面编程(AOP)的设计理念。Spring ...

    dwr和xfire使用

    DWR 提供了自动JSON序列化和反序列化、安全机制以及调试工具。 1. **核心功能**: - **AJAX 支持**:DWR 提供了一套易于使用的API,使得JavaScript可以直接调用服务器端的Java方法,实现异步更新。 - **安全性**...

    DWR和strut.docx

    \n\n**示例应用架构**\n一个简单的DWR和Struts结合的应用可能包含以下组件:\n\n1. 页面端:`demo.jsp`,显示用户界面,使用DWR调用服务器端的方法。\n2. 服务端:\n - `DemoAction`,Struts的Action子类,负责控制...

    ssh+ext+json+dwr技术实现的动态树

    这个名为“ssh+ext+json+dwr技术实现的动态树”的项目结合了这些技术,为我们提供了一个生动的示例,展示了如何在实际项目中有效地整合它们。 SSH(Spring、Struts、Hibernate)是Java Web开发的三大框架,它们各自...

Global site tag (gtag.js) - Google Analytics