1. 程式人生 > >Struts2 官方教程:AJAX

Struts2 官方教程:AJAX

AJAX是非同步JavaScript及XML的縮寫詞。根本上,一段JavaScript可以建立一個HTTP請求,並直接更新頁面的某部分,而沒有普通情況那樣的POST或GET請求、並且重新整理整個頁面。更棒的是,一個頁面可以包含多個創造同步(非同步)請求的JavaScript。
關鍵點是當一段指令碼建立一個“Ajax請求”(XHR)時,伺服器不知道它來自指令碼,並且像對待其它請求那樣處理它。Ajax如此成功的一個原因是,它能夠與仙遊的伺服器端技術配合良好,包括Struts。
不一樣的不是Ajax請求,而是Ajax響應(Ajax response)。不是返回一個供瀏覽器來顯示(或重顯示)的完整頁面,一個Ajax響應會只返回頁面的一部分。這個響應可以是XML,HTML,普通的文字,另一個指令碼,或者任何執行呼叫的指令碼所希望的其它東西。
Struts1和Struts2都能夠返回任意型別的響應。我們不侷限在轉發伺服器頁面。在Struts 1 中,你可以做類似下面這樣的事:

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello World!  This is an AJAX response from a Struts Action.");
out.flush();
return null;

在Struts 2 中,我們可以用Stream結果做相同的事。


有更簡單的辦法哦!
使用Struts 2 外掛(例如 JSON 外掛, jQuery 外掛等等),是普遍、推薦的來書寫直接來自於動作的響應。請閱讀下面的部分來了解細節。

Struts 2 result Action

package actions;
<b>
import java.io.InputStream;
import java.io.StringBufferInputStream;
import com.opensymphony.xwork2.ActionSupport;
<b>
public class TextResult extends ActionSupport{
    private InputStream inputStream;
    public InputStream getInputStream
() { return inputStream; } <b> public String execute() throws Exception { inputStream = newByteArrayInputStream("Hello World! This is a text string response from a Struts Action."); return SUCCESS; } }

Struts 2 配置TextResult 動作

<action name="text-result" class="actions.TextResult">
    <result type="stream">
        <param name="contentType">text/html</param>
        <param name="inputName">inputStream</param>
    </result>
</action>


Struts2 同樣也可以使用外掛來返回一個JSON響應。
在客戶端,有兩種基本的策略,就是混合與匹配。
搜先,你可以使用一個JSP標籤型別。這裡,你不需要知道非常多關於Ajax或JavaScript的知識。taglib完成了所有工作,你只需要指出,如何使用tablib。標準Struts 2 taglib 包括了幾個 Ajax JSP 標籤,以及大量可用的第三方庫,包括:

  • Ajax Tags
  • AjaxParts Taglib
  • ColdTags Suite
  • Prize Tags
  • JSON-taglib

你可以利用像Dojo、JQUERY、或者YUI,以及StreamResult或者JSON外掛,在普通舊式的HTML頁面上使用普通舊式的Ajax窗體。這裡,天空才是極限,但你實際上需要將JavaScript作為一門語言進行一定的學習。

Ajax 外掛

儘管Struts能夠與Ajax即插即用,但為了附加好處,有幾個以Ajax為中心的外掛可以使用。

  • jQuery
  • Ajax Parts
  • Dojo
  • YUI

其它Ajax外掛

  • Ajax File Upload
  • GWT
  • JSON

Ajax Results with JSP

儘管伺服器端的頁面大部分情況下更多地用來生成HTML,但我們可以使用伺服器端頁面來建立其它型別的資料流。這裡是一個例子:

book.jsp

“`
<%@ page import = java.util.Iterator,
java.util.List,
com.esolaria.dojoex.Book,
com.esolaria.dojoex.BookManager” %>
<%
String bookIdStr = request.getParameter(“bookId”);
int bookId = (bookIdStr == null || “”.equals(bookIdStr.trim()) ) ? 0:Integer.parseInt(bookIdStr);
Book book = BookManager.getBook(bookId);
if( book != null ) {
out.println(book.toJSONString());
System.out.println(“it is: “+book.toJSONString());
}
%>
在上面的示例程式碼中,我們使用System.out.println 來返回一個JSON資料流作為響應。關於這個技術更多的內容,可以檢視文件使用Dojo和JSON構建Ajax應用(英文教程)