簡體   English   中英

數據如何在Struts2中傳播?

[英]How data travels in Struts2?

我試圖理解Struts2中的數據路徑,如何將數據放在ValueStack上? 如何找出ValueStack中當前存在的對象? 我可以從不同的范圍應用程序,會話,請求,頁面訪問哪些其他數據? 如何確定我的變量應具有的范圍?

那是很多問題。

值棧只是一種數據結構,是地圖和堆棧的組合。 命名對象(通過OGNL中的#標簽訪問)在地圖中(比如請求范圍),搜索屬性/方法的對象在堆棧中。

<s:debug>標記是查找值堆棧中的內容的最簡單方法。 您還可以使用JSP中的“裸”數組表示法訪問堆棧中的任意對象,例如"[0]"是最頂層的對象, "[1]"是下一個,等等。這幾乎不是一個好主意。現實生活。

您可以訪問每個范圍中的任何內容。

您自己的對象幾乎總是通過動作本身放置在值堆棧上,或者如果您通過模型實現ModelDriven 除此之外,它與任何其他Java EE應用程序相同 - 客戶端會話期間所需的對象應該在會話范圍內,應用程序中共享的對象應該在應用程序范圍內等。

值棧本身位於請求范圍內。

我將專門解決“數據如何傳播”元素以及ValueStack的堆棧性。 至於關於什么數據可用的位,可以隨着上下文而改變;擁有“堆棧”的全部意義是支持范圍內數據的上下文變化。 此外,堆棧上的特定數據可以通過參考資料更好地覆蓋,例如struts網站上的參考資料。

Struts 2具有非常干凈的架構。 它可以很好地將軟件的關注點分成不同的組件。 其中一個主要的標志是行動是一個POJO。 作為一個極端,該行動的主要職責是攜帶數據。 它是主要的數據傳輸對象; 它的屬性接收傳入的請求數據,前提是命名所有排隊。 移動數據和考慮何時移動數據的任務被捕獲在另一個組件中:攔截器。

數據在ValueStack上的移動幾乎完全由攔截器完成。 處理請求時框架首先要做的事情之一是將新創建的操作對象放在valuestack的頂部。 這支持OGNL訪問您的操作屬性。 然后,攔截器將數據移動到valuestack,並且由於您的操作在那里,它的屬性將接收匹配的setter上的數據。 其他攔截器也會以類似的方式將內容移動到valuestack,例如驗證攔截器; 如果他們發現錯誤,那么該錯誤消息也會進入堆棧。

除了作為集中式數據容器之外,ValueStack當然也是一個堆棧。 當您考慮迭代器標記之類的東西時,這種堆棧性允許堆棧頂部的屬性隱藏堆棧中較低的屬性。 例如,如果迭代一組用戶,每個用戶都會進入堆棧頂部並在迭代體內保持不變。 這允許您的OGNL屬性引用依次命中每個用戶的屬性。 更重要的是,如果在堆棧中找到了具有類似命名屬性的其他內容,則頂部的用戶對象將隱藏它。 請注意,考慮到這一點,push標簽允許您將任何您喜歡的對象推送到堆棧中,在您需要強制使用自己的上下文時提供了很好的靈活性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM