easonfans 发表于 2013-1-23 02:43:15

Struts 2与AJAX(第一部分)

在当今——Web 2.0概念铺天盖地的Internet环境下,简易的AJAX集成对于一个成功的WEB框架来说是不可或缺的。因此,Struts 2其中的一个重要的功能(Feature)就是“First-class AJAX support - Add interactivity and flexibility with AJAX tags that look and feel just like standard Struts tags(大意:一流的AJAX支持——通过AJAX标志增加互动性和灵活性,而且使用这些AJAX标志与普通的Struts标志同样简单)”。
实现原理

基于不重新发明轮子的原则,Struts 2并没有开发新的AJAX框架,而是使用时下Java EE平台中比较流行的AJAX框架——Dojo和DWR。
最近在Musachy Barroso等同志的无私奉献下,开发了Struts 2的JSON插件(Plugin),极大地方便了我们输出JSON结果(Result)。
JSON插件(Plugin)

在Struts 2的showcase中的AJAX部分,JSON的结果输出是通过Freemaker模板实现。这种方法在简易性和灵活性上都比不上JSON插件,所以JSON插件值得向大家五星推荐。
下面让我们看一个JSON插件的例子。
首先到以下网址http://code.google.com/p/jsonplugin/downloads/list下载JSON插件的JAR包,并将其加入你的WebContent\WEB-INF\lib下。
接下是本例子的Action代码:
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee;">http://www.blogjava.net/Images/OutliningIndicators/None.gifpackage tutorial;
http://www.blogjava.net/Images/OutliningIndicators/None.gif
http://www.blogjava.net/Images/OutliningIndicators/None.gifimport java.util.ArrayList;
http://www.blogjava.net/Images/OutliningIndicators/None.gifimport java.util.List;
http://www.blogjava.net/Images/OutliningIndicators/None.gif
http://www.blogjava.net/Images/OutliningIndicators/None.gifimport com.googlecode.jsonplugin.annotations.JSON;
http://www.blogjava.net/Images/OutliningIndicators/None.gifimport com.opensymphony.xwork2.ActionSupport;
http://www.blogjava.net/Images/OutliningIndicators/None.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gifpublic class JsonPluginAction extends ActionSupport http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif    private static final long serialVersionUID = -6784977600668791997L;
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif    
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif    private int bookId;
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif    private String title;
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif    private double price;
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif    private List<String> comments;    
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif    private transient String secret1;
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif    private String secret2;
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif    @JSON(name="ISBN")
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif    public int getBookId() http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        return bookId;
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif    public void setBookId(int bookId) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        this.bookId = bookId;
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif    public List<String> getComments() http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        return comments;
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif    public void setComments(List<String> comments) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        this.comments = comments;
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif    public double getPrice() http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        return price;
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif    public void setPrice(double price) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        this.price = price;
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif    public String getTitle() http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        return title;
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif    
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif    public void setTitle(String title) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        this.title = title;
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif    @Override
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif    public String execute() http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        bookId = 15645912;
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        title = "Max On Java";
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        price = 0.9999d;
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        comments = new ArrayList<String>(3);
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        comments.add("It's no bad!");
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        comments.add("WOW!");
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        comments.add("No comment!");
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        secret1 = "You can't see me!";
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        secret2 = "I am invisible!";
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        return SUCCESS;
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    }
http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif}
页: [1]
查看完整版本: Struts 2与AJAX(第一部分)