Struts2 官方教程:AJAX

來源:互聯網
上載者:User

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應用(英文教程)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.