`

Struts2 + jquery

阅读更多

废话不多说,直接示例:
首先当然要搭建好struts2的开发环境,为了使用json数据格式,要导入struts2的一个json插件包,
我用的是struts2.1.8 其解压后的在解压文件的lib目录下可找到这个json插件包struts2-json-plugin-2.1.8.1.jar
我的目录结构
src--
     |---com.sun.jsondemo(package)
     |        |----JsonPluginAction.java
     |---struts.xml


WebRoot--
         |---js(folder)
         |    |----jquery-1.4.js
         |---WEB-INF
              |----lib(项目所需jar包)
              |----page
                     |---book.jsp


JsonPluginAction.java:
package com.sun.jsondemo;
 
import java.util.ArrayList;
import java.util.List;
import org.apache.struts2.json.annotations.JSON;
import com.opensymphony.xwork2.ActionSupport;
public class JsonPluginAction extends ActionSupport {
/**
 *
 */ private static final long serialVersionUID = 1L;
    private int bookid;
    private String title;
    private double price;
    private List<String> comments; //secret1 和 secret2 没有提供setter和getter方法,不会返回为json格式
  
    private transient String secret1; //这个关键字表示 这个field不会持久化
    private String secret2; @JSON(name="ISBN") //可以通过注解方式改变json对象中属性的名称  
    public int getBookid() { return bookid; }
    public void setBookid(int bookid) { this.bookid = bookid; }
 
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
  
    public double getPrice() { return price; }
    public void setPrice(double price) { this.price = price; }
   
    public List<String> getComments() { return comments; }
    public void setComments(List<String> comments) { this.comments = comments; }
    @Override
   //我们在这里简单的给定一些值,实际当然从页面动态获取
    public String execute() throws Exception {
        bookid = 111111;
        title = "struts-json-jquery integration";
        price = 99;
        comments = new ArrayList<String>(3);
        comments.add("It's no bad");
        comments.add("WOW");
        comments.add("No comment!");
        secret1 = "You can't see me";
        secret2 = "I am invisible";
        return SUCCESS;
    }
 }

struts2.xml:
<struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <constant name="struts.ui.theme" value="simple"></constant>
<!-- json-default 定义在struts2的json插件包中,它包括了struts-default --> <package name="demo" namespace="/jsondemo" extends="json-default"> <action name="JsonPlugin" class="com.sun.jsondemo.JsonPluginAction"> <!-- 这里type为json,表示action中的属性将以json对象的格式输出-->
<result type="json"/> </action> <action name="GetJsonData"> <result type="dispatcher">/WEB-INF/page/book.jsp</result> </action> </package> </struts>
如果我们到此为止,通过浏览器访问http://localhost:8080/struts2demo/jsondemo/JsonPlugin.action
浏览器则会提示下载文件 把文件打开后里面就是json的数据格式
    {"ISBN":111111,"comments":["It's no bad!","WOW!","No                                                         comment!"],"price":99,"title":"struts-json-jquery integration"}

这样肯定是不能干活的,但是到这里也算是成功的一半了。下面来个book.jsp通过jquery中的$.getJSON()函数:
<html>
  <head>
    <title>My JSP 'global.jsp' starting page</title>
   
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">   
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.4.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#showbook").click( function() {
var basepath = $("#basepath").val();
                      var detail = $("#detail");
$.getJSON(basepath + "/jsondemo/JsonPlugin.action",
{t:new Date()},
function(data) {
var isbn = data.ISBN;
var title = data.title;
alert(title);
var price = data.price;
detail.append("ISBN: " + isbn + "<br/>" +
"Title: " + title + "<br/>" +
"Price: " + price + "<br/>");
detail.append("Comments:" + "<br/>" + "<hr>" + "<br/>");
var comments = data.comments;
for(var i = 0; i < comments.length; i++) {
                                     detail.append("<p>" + "#" + (i+1) + " " + comments[i] + "</p><br>");
}
});
});
});
</script>
  </head>
 
  <body>
  <input id="basepath" type="hidden" value="${pageContext.request.contextPath}">
  <input id="showbook" type="button" value="Retrieve Book">
  <div id="detail"></div>
  </body>
</html>
完成了,到这里我们通过http://localhost:8080/struts2demo/jsondemo/GetJsonData.action就可以访问到
book.jsp页面,点击button就能在页面上看到反回的数据,这里其实主要涉及到json数据的解析。我对jquery也刚刚
开始研究,所以这里写的js代码肯定不够优美....
呵呵,如果有不正确的地方 请大家指出!

分享到:
评论
5 楼 guimingyue 2010-12-23  
scholers 写道
看了下,好像每次请求都是产生一个新的实例,这样就不会有线程安全问题了

貌似Servlet从初始化到销毁都只有一个对象吧!
4 楼 9865qq 2010-04-13  
大哥, 你真棒 学习了
3 楼 smallbee 2010-04-11  
scholers 写道
看了下,好像每次请求都是产生一个新的实例,这样就不会有线程安全问题了

变态的答题才能回复 哎。。。


现在的所有框架都是基于sevlet的  servlet每次请求都会产生新实例,应该不用考虑这个线程问题的吧
2 楼 scholers 2010-04-11  
看了下,好像每次请求都是产生一个新的实例,这样就不会有线程安全问题了
1 楼 scholers 2010-04-11  
JsonPluginAction是多线程模式吗?
如果是单例的,恐怕有线程安全问题

private int bookid;
    private String title;
    private double price;
    private List<String> comments; //secret1 和 secret2 没有提供setter和getter方法,不会返回为json格式

相关推荐

Global site tag (gtag.js) - Google Analytics