1.如果你的web框架中运用到ajax,而你又需要用户从前台发出强求,struts响应的结果是json数据格式。在此我神奇的告诉你,你在引入jar时,有两种选择,同样你的写法同样有两种。
第一种:struts2-json-plugin-2.3.15.2.jar
第二种:json-lib-2.3-jdk15.jar
ezmorph-1.0.6.jar
commons-lang-2.4.jar
---这里我只介绍第一种,因为第一种代码少。。第二种显得有点繁琐。(相对而言)
代码显示:Action
package com.ltx.shtoone.action;
import java.util.ArrayList;
import java.util.List;
import com.ltx.shtoone.domain.BookInfo;
import com.ltx.shtoone.domain.UserInfo;
import com.opensymphony.xwork2.ActionSupport;
public class Test2Action extends ActionSupport {
private static final long serialVersionUID = 1L;
private UserInfo user;
private String message;
private List<BookInfo> list_book;
private List<String> list_str;
public List<String> getList_str() {
return list_str;
}
public void setList_str(List<String> listStr) {
list_str = listStr;
}
public List<BookInfo> getList_book() {
return list_book;
}
public void setList_book(List<BookInfo> listBook) {
list_book = listBook;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public UserInfo getUser() {
return user;
}
public void setUser(UserInfo user) {
this.user = user;
}
public String test2(){
if(this.getUser().getUsername().equals("admin") && this.getUser().getPassword().equals("admin")){
this.setMessage("ltx");
list_book=new ArrayList<BookInfo>();
BookInfo book1=new BookInfo();
book1.setBookId("shtoone");
book1.setBookName("天下第一");
book1.setBookPrice(21.5F);
BookInfo book2=new BookInfo();
book2.setBookId("SB101");
book2.setBookName("天下第一");
book2.setBookPrice(21.5F);
BookInfo book3=new BookInfo();
book3.setBookId("SB101");
book3.setBookName("天下第一");
book3.setBookPrice(21.5F);
list_book.add(book1);
list_book.add(book2);
list_book.add(book3);
this.setList_book(list_book);
list_str=new ArrayList<String>();
list_str.add("1");
list_str.add("2");
list_str.add("3");
this.setList_str(list_str);
return SUCCESS;
}else{
this.setMessage("error");
return ERROR;
}
}
}
这里我的action,值栈中存在的数据有一定的代表性;一个简单的数据变量(message),一个对象(User),一个对象封装成的list集合(list_book),还有一个是普通数据类型的list集合(list_str)。
而struts.xml呢?
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="json-default">
<action name="login" class="com.ltx.shtoone.action.LoginAction" method="login">
<result name="list" type="json"></result>
</action>
<action name="test" class="com.ltx.shtoone.action.TestAction" method="test">
<result name="success" type="json">
</result>
</action>
<action name="test1" class="com.ltx.shtoone.action.Test1Action" method="test1">
<result name="success" type="json">
<param name="root">message</param>
</result>
<result name="error" type="json">
<param name="root">message</param>
</result>
</action>
<action name="test2" class="com.ltx.shtoone.action.Test2Action" method="test2">
<result name="success" type="json">
<param name="includeProperties">message,list_book.*,ltx,list_str.*</param>
</result>
<result name="error" type="json">
<param name="excludeProperties">list_book.*,user</param>
</result>
</action>
<action name="test3" class="com.ltx.shtoone.action.Test3Action" method="test3">
<result name="success" type="json">
<param name="includeProperties">message,list_book.*,ltx,list_str.*</param>
</result>
<result name="error" type="json">
<param name="wrapPrefix"><![CDATA[<html><body><h1>]]></param>
<param name="root">message</param>
<param name="wrapSuffix"><![CDATA[</h1></body></html>]]></param>
</result>
</action>
</package>
</struts>
我的xml中灰常具有代表性,将值栈中内容转变成json格式时,我的param很有特点:root,includeProperties,excludeProperties,wrapSuffix,wrapSuffix。json中的param很有意思,有很多,自己百度吧。
前台jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="scripts/jquery-1.6.2.min.js" charset="UTF-8"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#btn").live("click",function(){
var context="";
$.ajax({
url: "test3",
type: "post",
dataType:"json",
data: $("#form").serialize(),
success: function (data) {
if(data.message=="ltx"){
context+="<table border='1'>";
context+="<tr>";
context+="<th>编号</th>";
context+="<th>书名</th>";
context+="<th>单价</th>";
context+="</tr>";
$.each(data.list_book,function(index,book){
context+="<tr>";
context+="<td>"+book.bookId+"</td>";
context+="<td>"+book.bookName+"</td>";
context+="<td>"+book.bookPrice+"</td>";
context+="</tr>";
});
context+="</table>";
$.each(data.list_str,function(index,str){
alert(str);
});
}else{
alert(data);
context+="没有数据哦!!";
}
$("#content").html(context);
}
});
});
});
</script>
</head>
<body>
<form id="form">
用户名:<input type="text" name="user.username"/>
密码:<input type="password" name="user.password"/>
<input type="button" value="aa" id="btn"/>
</form>
<div id="content"></div>
</body>
</html>