javascript
Spring MVC,Ajax和JSON第1部分–设置场景
我一直在考慮在Spring,Ajax和JSON上寫博客,但是我從來沒有做過。 這主要是因為它非常復雜,并且所需的技術一直處于變化狀態。 當我決定撰寫此博客時,我在Internet上有一個偵察員,如果您查看諸如Stack Overflow之類的地方,您會看到許多不同且通常相互矛盾的答案,這些問題是“我如何編寫Spring Ajax / JSON應用程序? ” 我認為這是Spring專家的錯,因為他們一直在忙于改善Spring對JSon的支持。 不僅是JQuery的專家們也很忙,這意味著在過去的幾年中,總體情況發生了巨大變化,并且給出了“如何編寫Spring Ajax / JSON應用程序”的答案。 已經過時了。
如果查看Keith Donald的原始Spring 3 MVC Ajax應用程序,您會發現它非常復雜。 支持JSON集成需要大量的樣板代碼和一些怪異JavaScript。 在最新版的Spring中,所有更改都已完成。 正如我所說的,Spring和JQuery的Guy一直很忙,現在事情變得簡單得多。 編寫此類應用程序時,需要考慮一些步驟。 首先,您需要將能夠發出Ajax請求的頁面加載到瀏覽器中。 其次,您必須編寫一些代碼來服務Ajax請求,最后,頁面必須顯示其結果。 為了演示Spring MVC,Ajax和JSON,我將使用購物網站場景。 在這種情況下,當用戶單擊“電子商務頁面”鏈接時,該應用程序將從目錄中加載一些項目并將其顯示在頁面上。 然后,用戶檢查多個項目并按“確認購買”。 現在,這就是Ajax和JSON的來源,在按“確認購買”時,瀏覽器向向其發送項目ID的服務器發出Ajax請求。 然后,服務器從數據庫中檢索項目,并將它們作為JSON返回到瀏覽器。 然后,瀏覽器處理JSON,并在屏幕上顯示項目。 在編寫代碼時,第一步是使用Spring儀表板上可用的項目模板來創建Spring MVC項目。
擁有空白項目后,需要對項目的POM文件進行一些更改。 首先,您需要添加Jackson JSON Processor依賴項。 接下來,您需要將Spring的版本更新為3.2.2。 這是因為模板項目生成器仍會生成3.1.1版本的項目。
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.0.4</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.0.4</version></dependency><org.springframework-version>3.2.2.RELEASE</org.springframework-version>如果查看我在Github上可用的代碼,您會發現我還添加了Tomcat Maven插件并將Java編譯器源/目標版本設置為1.7。 這些都是可選步驟。
接下來要做的是創建一個Item類來定義用戶將從我們虛構的目錄中購買的項目。
public class Item { private final int id; private final String description; private final String name; private final BigDecimal price; private Item(int id, String name, String description, BigDecimal price) { this.id = id; this.name = name; this.description = description; this.price = price; } public final BigDecimal getPrice() { return price; } public final int getId() { return id; } public final String getDescription() { return description; } public final String getName() { return name; } public static Item getInstance(int id, String name, String description, BigDecimal price) { Item item = new Item(id, name, description, price); return item; } }上面的代碼定義了我們簡單的Item 。 它的屬性包括id , name , description和price 。
此購物場景的下一步是編寫在屏幕上顯示商品的代碼,以便用戶可以進行選擇并將其提交給服務器。 如您所料,這涉及編寫包含表單的JSP并使用Spring MVC控制器處理來自表單的請求。 我將首先討論控制器代碼,因為它決定了JSP的編寫方式。
/** * Create the form */ @RequestMapping(value = "/shopping", method = RequestMethod.GET) public String createForm(Model model) { logger.debug("Displaying items available in the store..."); addDisplayItemsToModel(model); addFormObjectToModel(model); return FORM_VIEW; } private void addDisplayItemsToModel(Model model) { List<Item> items = catalogue.read(); model.addAttribute("items", items); } private void addFormObjectToModel(Model model) { UserSelections userSelections = new UserSelections(); model.addAttribute(userSelections); }使我們的表單顯示在屏幕上的控制器方法是createForm(…) 。 該方法由通常的RequestMapping注釋進行注釋,該注釋告訴Spring將所有具有“ shopping ” URL的GET請求映射到該位置。 該方法包括三個步驟:首先讀取目錄,以獲得要顯示的項目列表;然后,執行以下步驟: 然后,它創建一個UserSelections對象,該表單在提交用戶購買的商品時由表單使用。 最后,它將我們定向到shopping.jsp 。
對于這種形式的創建方法,這些設置步驟是很正常的:首先將顯示數據添加到模型中,然后將表單提交方式添加到模型中; 但是,這兩個步驟經常結合在一起。
在控制器代碼中,您還將看到用于獲取項目的catalogue對象。 在實際的應用程序中,這等效于創建一個服務層組件,該組件使用DAO和通常與此類應用程序關聯的所有用具來讀取數據。 在這種情況下,它只是從硬編碼數組創建項目列表,并不重要。
該控制器代碼與下面的JSP代碼片段非常緊密地聯系在一起:
<form:form modelAttribute="userSelections" action="confirm" method="post"><c:forEach items="${items}" var="item"><div class="span-4 border"><p><c:out value="${item.name}" /></p></div><div class="span-8 border"><p><c:out value="${item.description}" /></p></div><div class="span-4 border"><p>£<c:out value="${item.price}" /></p></div><div class="span-4 append-4 last"><p><form:checkbox value="${item.id}" path="selection"/></p></div></c:forEach><div class="prepend-12 span-4 append-12"><p><input class="command"type="submit" name="action"value="Confirm Purchase"accesskey="A" /></p></div></form:form>這里有幾點要注意。 首先,我通過使用Spring表單標簽(<form:form…>)使自己的生活變得輕松,其次,我正在使用Blueprint格式化頁面。 在設置表單標簽時,首先要考慮的是表單標簽的屬性: modelAttribute , command和method 。 modelAttribute用于綁定的UserSelections由控制器到HTML表格提供的類。 command屬性是一個URL,它告訴瀏覽器在何處提交其數據,而method屬性則告訴瀏覽器將提交的內容POST到服務器。
在JSP的下一部分中,我使用了forEach循環來顯示先前從目錄中檢索到的項目。 重要的一行是form:checkbox標記。 您可能會懷疑,這會使用項目的ID和selection “路徑”創建一個HTML復選框。 對我而言,“路徑”一詞聽起來令人困惑。 Spring的員工實際上的意思是“提交時,取走存儲在復選框的value屬性(item.id)中的值,如果選中,則將其存儲在
使用setSelection(…)方法的UserSelections對象”。 這可能是在后臺完成的,方法是解析HttpServletRequest對象,然后使用Java反射進行一些挑剔的撲克操作。 需要注意的是,JSP中的名稱如何與UserSelection類的屬性名稱聯系UserSelection 。
我發現Spring表單標簽在大多數情況下非常有用; 但是,為了使事情簡單,它在綁定到哪個HTML對象的數據上確實有一些限制。 當您遇到這些限制之一時,請結合使用更多詳細的Spring Bind標簽和form標簽。
好的,因此,當您運行此代碼時,將顯示一個類似于以下內容的屏幕:
問題是,我知道我在此博客中沒有談論過AKAX和JSON,但我需要設置場景。 在該博客的第二部分中,我一定會介紹該場景的實質部分:通過Ajax調用獲取和顯示JSON數據。 有關此博客的完整源代碼,請參見GitHub – https://github.com/roghughe/captaindebug/tree/master/ajax-json
翻譯自: https://www.javacodegeeks.com/2013/05/spring-mvc-ajax-and-json-part-1-setting-the-scene.html
總結
以上是生活随笔為你收集整理的Spring MVC,Ajax和JSON第1部分–设置场景的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理财风险评估怎么修改?
- 下一篇: JSON处理的Java API(JSR-