Struts 2 + JSON AJAX 반환 대상 및 목록 구현

14669 단어 jsonAjaxjspbeanstruts
JSON 은 JavaScript 에서 Action 을 비동기 로 호출 할 수 있 는 플러그 인 입 니 다. json 의 결과 형식 (ResultType) 을 제공 합 니 다. Action 에 형식 을 지정 하면 됩 니 다.
json 이 결과 형식 을 되 돌려 줍 니 다. 이 응답 결 과 는 그 어떠한 그림 에 도 되 돌아 갈 필요 가 없습니다. JSON 은 Action 의 상태 정 보 를 JSON 이 지정 한 형식의 데이터 로 정렬 하고 이 데 이 터 를 되 돌려 줍 니 다.
JAVASCRIPT 에 게 이렇게 하면 AJAX 의 응용 상호작용 을 완성 할 수 있 습 니 다. JSON 플러그 인 을 사용 하려 면 먼저
  http://code.google.com/p/jsonplugin/downloads/list
최신 JSON 플러그 인 을 다운로드 합 니 다. 제 가 다운로드 한 것 은 jsonplugin 입 니 다 -
0.33. jar, 이 파일 을 WEB 프로젝트 의 LIB 디 렉 터 리 에 복사 합 니 다. 물론 Struts 2 라 이브 러 리 를 다운로드 해 야 합 니 다. http://struts.apache.org/download.cgi#struts2014
여기 서 다운로드 하고 다운로드 한 후에 압축 을 풀 고 JAR 을 WEB 프로젝트 의 LIB 디 렉 터 리 에 복사 합 니 다. 다음 과 같은 JAR 파일 (struts 2 - api - 2.0.5. jar, struts 2 - core - 2.0.5. jar,
ognl - 2.6.9. jar, xwork - 2.0.0. jar, comons - logging - 1.1. jar, freemarker - 2.3.8. jar, 구체 적 인 파일 명 시 버 전 으로 정 함) 다음 에 우 리 는 응용 프로그램 을 쓸 수 있 습 니 다.
시험 을 해 보 겠 습 니 다. 이 규칙 은 두 단계 로 나 누 어 쓰 겠 습 니 다. 첫 번 째 단 계 는 결과 대상 을 되 돌려 주 고 두 번 째 단 계 는 결과 목록 을 되 돌려 줍 니 다. 먼저 결과 대상 의 실현 을 살 펴 보 겠 습 니 다. 우 리 는 먼저 자바 빈 을 값 대상 으로 하여 사용자 의 기본 데 이 터 를 밀봉 해 야 합 니 다. 이 실 체 는 결과 대상 과 결과 목록 에서 Users. 자바 코드 를 다음 과 같이 사용 합 니 다.
package com.jsontostruts2.vo;

/**
 * <p>
 *      :ChenTao
 * <p>
 *     :2009-5-18   05:24:48
 * <p>
 */
public class Users {

	private Integer userId;

	private String userName;

	private String sex;

	public Users() {

	}
	// get... set....  ......
}

 
UserAction. java 원본 코드 는 다음 과 같 습 니 다.
package com.jsontostruts2.action;

import com.googlecode.jsonplugin.annotations.JSON;
import com.jsontostruts2.vo.Users;
import com.opensymphony.xwork2.ActionSupport;

/**
 * <p>
 *      :ChenTao
 * <p>
 *     :2009-5-18   05:22:50
 * <p>
 */
@SuppressWarnings("serial")
public class UserAction extends ActionSupport {

	private Users users;
	
	@JSON(name="USER")
	public Users getUsers() {
		return users;
	}

	public void setUsers(Users users) {
		this.users = users;
	}

	@Override
	public String execute() throws Exception {
		users = new Users();
		users.setUserId(1);
		users.setUserName("ctojxzsycztao");
		users.setSex("  ");
		return SUCCESS;
	}

}

 
다음은 struts. xml 파일 을 설정 해 야 합 니 다. 이 파일 을 다시 쓰 지 않 기 위해 서 는 결과 대상 과 목록 의 요청 을 함께 붙 여야 합 니 다. 파일 내용:
<?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>
	<!--           struts-default,   json-default -->
	<package name="jsonManager" extends="json-default">
		<!--         json -->
		<action name="userJson" class="com.jsontostruts2.action.UserAction">
			<result type="json"/>
		</action>
		<!--  action            -->
		<action name="jsonlist" class="com.jsontostruts2.action.UserListAction">
			<result type="json"/>
		</action>
		
	</package>
</struts>

 
웹. xml 과 userjson. jsp 를 만 들 수 있 습 니 다:
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">

	<filter>
		<filter-name>Struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>Struts2</filter-name>
		<url-pattern>*.action</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>Struts2</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 
userjson.jsp :
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>json       </title>
	<script language="javascript">
		var xmlHttp = false;
		try{
			xmlHttp = new ActiveXObject("msxml2.XMLHTTP");
		}catch(e1){
			try{
				xmlHttp = new ActiveXObject("microsoft.XMLHTTP");
			}catch(e2){
				try{
					xmlHttp = new XMLHttpRequest();
				}catch(e3){
					xmlHttp = false;
				}
			}
		}
		if(!xmlHttp){
			alert("create xmlHttpRequest fail");
		}
		function jsonResult(){
			xmlHttp.onreadystatechange = function(){
			    if(xmlHttp.readyState == 4) {
				//   JSON      JSON   ,      eval       "(" ")" JSON      , 

    
				var userObj = eval('(' + xmlHttp.responseText + ')');
				var userStr = "<table border=0>";
                    userStr += '<tr><td><b>userId</b></td><td>' + userObj.USER.userId + '</td></tr>';
                    userStr += ('<tr><td><b>userName</b></td><td>' + userObj.USER.userName + '</td></tr>');
                    userStr += ('<tr><td><b>sex</b></td><td>' + userObj.USER.sex + '</td></tr>');
                    userStr += "</table>";
                    document.getElementById('jsonDiv').innerHTML = userStr;
                }
			}
			xmlHttp.open("POST","userJson.action",true);
			xmlHttp.send(null);
		}
	</script>
  </head>
  <body>
  	<div id="jsonDiv"></div>
    <input type="button" value="show" onclick="jsonResult();">
  </body>
</html>

 
이제 용기 에 애플 리 케 이 션 을 입력 http://localhost:8080/struts2ToJson/userjson.jsp 시 show 를 발표 할 수 있 습 니 다. 이 럴 때 원 하 는 매듭 을 볼 수 있 습 니 다.
따라서 다음 반환 목록 을 실현 하 는 방법 은 물론 반환 대상 과 다 를 수 있 습 니 다. 우 리 는 하나의 List 대상 을 JSON 규범 의 문자열 로 바 꾸 고 클 라 이언 트 에 보 낼 수 있 는 JS 로 바 꿔 야 합 니 다.
먼저 List 를 지정 한 문자열 로 변환 하 는 도구 클래스 를 만 듭 니 다. 이 도 구 는 무심코 인터넷 에서 보고 가 져 왔 습 니 다. 약간의 수정 을 거 쳐 코드 줄 수 를 줄 이기 위해 서 만 붙 일 것 입 니 다.
이 예제 에 사용 할 코드: JSonUtil. 자바:
package com.jsontostruts2.util;

import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.List;

/**
 * <p>
 * @author ChenTao
 * <p>
 * @Date 2009-5-18   05:47:27
 * <p>
 */
public class JsonUtil {

	/**
	 * @param object
	 *                
	 * @return java.lang.String
	 */
	public static String objectToJson(Object object) {
		StringBuilder json = new StringBuilder();
		if (object == null) {
			json.append("\"\"");
		} else if (object instanceof String || object instanceof Integer) {
			json.append("\"").append((String)object).append("\"");
		} else {
			json.append(beanToJson(object));
		}
		return json.toString();
	}

	/**
	 *     :       javabean               
	 * 
	 * @param bean
	 *            bean  
	 * @return String
	 */
	public static String beanToJson(Object bean) {
		StringBuilder json = new StringBuilder();
		json.append("{");
		PropertyDescriptor[] props = null;
		try {
			props = Introspector.getBeanInfo(bean.getClass(), Object.class)
					.getPropertyDescriptors();
		} catch (IntrospectionException e) {
		}
		if (props != null) {
			for (int i = 0; i < props.length; i++) {
				try {
					String name = objectToJson(props[i].getName());
					String value = objectToJson(props[i].getReadMethod().invoke(bean));
					json.append(name);
					json.append(":");
					json.append(value);
					json.append(",");
				} catch (Exception e) {
				}
			}
			json.setCharAt(json.length() - 1, '}');
		} else {
			json.append("}");
		}
		return json.toString();
	}

	/**
	 *     :          ,                 JSON       
	 * 
	 * @param list
	 *                
	 * @return java.lang.String
	 */
	public static String listToJson(List<?> list) {
		StringBuilder json = new StringBuilder();
		json.append("[");
		if (list != null && list.size() > 0) {
			for (Object obj : list) {
				json.append(objectToJson(obj));
				json.append(",");
			}
			json.setCharAt(json.length() - 1, ']');
		} else {
			json.append("]");
		}
		return json.toString();
	}
}

 
UserListAction.java:
package com.jsontostruts2.action;

import java.util.ArrayList;
import java.util.List;

import com.googlecode.jsonplugin.annotations.JSON;
import com.jsontostruts2.util.JsonUtil;
import com.jsontostruts2.vo.Users;
import com.opensymphony.xwork2.ActionSupport;

/**
 * <p>
 *      :ChenTao
 * <p>
 *     :2009-5-18   05:45:42
 * <p>
 */
@SuppressWarnings("serial")
public class UserListAction extends ActionSupport {
	
	/*     JSON          */
	private String jsonResult;

	@JSON(name="JSONRESULT")
	public String getJsonResult() {
		return jsonResult;
	}

	public void setJsonResult(String jsonResult) {
		this.jsonResult = jsonResult;
	}

	@Override
	public String execute() throws Exception {
		List<Users> userList = new ArrayList<Users>();
		Users users = new Users();
		users.setUserId(1);
		users.setUserName("ctojxzsycztao");
		users.setSex("  ");
		userList.add(users);
		users = null;
		users = new Users();
		users.setUserId(2);
		users.setUserName("rain");
		users.setSex("  ");
		userList.add(users);
		users = null;
		users = new Users();
		users.setUserId(3);
		users.setUserName("mimi");
		users.setSex("  ");
		userList.add(users);
		jsonResult = JsonUtil.listToJson(userList);
		System.out.println(jsonResult);
		return SUCCESS;
	}
}

 
다음은 jsonList. JSP 페이지 를 써 서 결 과 를 사용자 에 게 전달 할 것 입 니 다.
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>json       </title>
	<script language="javascript">
		var xmlHttp = false;
		try{
			xmlHttp = new ActiveXObject("msxml2.XMLHTTP");
		}catch(e1){
			try{
				xmlHttp = new ActiveXObject("microsoft.XMLHTTP");
			}catch(e2){
				try{
					xmlHttp = new XMLHttpRequest();
				}catch(e3){
					xmlHttp = false;
				}
			}
		}
		if(!xmlHttp){
			alert("create xmlHttpRequest fail");
		}
		function jsonListResult(){
			xmlHttp.onreadystatechange = function(){
			    if(xmlHttp.readyState == 4) {
					var userList = eval('(' + xmlHttp.responseText + ')');
					var user = eval(userList.JSONRESULT);
					var result = "<table border=0>";
					result += "<tr><td>userId</td><td>userName</td><td>sex</td></tr>";
					for(var i=0;i<user.length;i++) {
						result += "<tr>";
						result += "<td>"+user[i].userId +"</td>";
						result += "<td>"+user[i].userName+"</td>";
						result += "<td>"+user[i].sex+"</td>";
						result += "</tr>";
					}
					result += "</table>";
                    document.getElementById('jsonDiv').innerHTML = result;
                }
			}
			xmlHttp.open("POST","jsonlist.action",true);
			xmlHttp.send(null);
		}
	</script>
  </head>
  <body>
  	<div id="jsonDiv"></div>
    <input type="button" value="show list" onclick="jsonListResult();">
  </body>
</html>

 현재 프로젝트 를 WEB 용기 에 중복 배치 합 니 다. 시작: 브 라 우 저 에 show list 단 추 를 입력 하고 결 과 를 보십시오.
정확 한 지 여 부 는 본 규칙 을 참고 하여 빠 뜨리 지 않 은 부분 이 설정 되 어 있 는 지 확인 하 십시오. 상기 코드 에서 우 리 는 모두 @ JSON 의 주 해 를 보 았 습 니 다. 이 주 해 는 JSON 이 결 과 를 되 돌려 주 는 속성 명 을 바 꿀 수 있 습 니 다. 좋 은 글 은 여기까지 쓰 고 예제 가 필요 한 친구 들 은 첨부 파일 에서 다운로드 할 수 있 습 니 다. 그 안에 해당 글 의 소스 코드 와 해당 하 는 JAR 이 포함 되 어 있 습 니 다.

좋은 웹페이지 즐겨찾기