日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring和JSF集成:导航

發(fā)布時間:2023/12/3 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring和JSF集成:导航 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我希望這是有關(guān)我在Spring和JavaServer Faces之間提供深度集成的努力的一系列博客中的第一篇。 這里提到的所有內(nèi)容都是“正在進(jìn)行中的工作”,因此,如果您簽出代碼,請注意它是一個不斷變化的目標(biāo)。 期待一些粗糙的邊緣,如果有時會斷裂,不要感到驚訝。

您已經(jīng)可以很輕松地使用帶有JSF的Spring,Spring可以管理bean和JSF來處理屏幕。 Spring Web Flow中還對JSF提供了一些非常好的支持,如果您正在做任何基于流的應(yīng)用程序,那么您確實應(yīng)該使用Web Flow。 Web Flow還提供org.springframework.faces.mvc. JsfView類,使您可以從Spring MVC呈現(xiàn)JSF頁面。 不幸的是, JsfView僅呈現(xiàn)瞬態(tài)(無狀態(tài))視圖,如果您想處理回發(fā),則JsfView走運。

允許Spring MVC渲染可以處理回發(fā)的JSF視圖一直是我啟動該項目的主要動力。 得益于MVC和JSF的靈活性,完全可以集成這些技術(shù)(盡管關(guān)于如何最好地保存其他帖子的確切細(xì)節(jié))。 我想在本文的其余部分中討論如何創(chuàng)建非常好的JSF導(dǎo)航。

如果您使用了標(biāo)準(zhǔn)的JSF導(dǎo)航,那么您可能已經(jīng)習(xí)慣了faces-config.xml的以下類型的事情:

<navigation-rule><from-view-id>/pages/list.xhtml</from-view-id><navigation-case><from-outcome>select</from-outcome><to-view-id>/pages/details.xhtml</to-view-id><redirect/></navigation-case> </navigation-rule>

雖然很容易理解,但是對于標(biāo)準(zhǔn)方法來說,標(biāo)準(zhǔn)方法存在一些明顯的缺點,因為它非常冗長。 大多數(shù)時候,我想重定向我的用戶,而不是讓他們困惑為什么URL顯示與當(dāng)前頁面不同的內(nèi)容。 實際上在每個元素上都需要<redirect/>確實很煩人。 XML的數(shù)量顯然使JSF的開發(fā)人員感到不安,幸運的是,JSF 2.0引入了隱式導(dǎo)航的概念。 這是我們稍后將使用的東西。 如果您想閱讀有關(guān)JSF導(dǎo)航的非常好的文章,請使用Dan Allen撰寫的JSF 2中的Fluent Navigation 。

導(dǎo)航實際上是關(guān)于目的地的,將某人重定向到404 page not found錯誤沒有多大意義。 對于JSF而言,創(chuàng)建漂亮的可讀URL目標(biāo)始終是一件艱辛的事情。 現(xiàn)在,在不開發(fā)自己的代碼的情況下,創(chuàng)建可讀URL的最佳選擇可能是使用PrettyFaces 。 當(dāng)然,通過將JSF和Spring很好地集成在一起,您不需要使用@RequestMapping注釋以外的任何其他東西來創(chuàng)建可讀的URL。 下面的示例演示如何映射一個可讀的URL,以顯示ID中的酒店詳細(xì)信息。

@Controller public class HotelsController {@RequestMapping(value = "/hotels/{id}", method = RequestMethod.GET)public String show(@PathVariable Long id, Model model) {model.addAttribute(bookingService.findHotelById(id));return "hotels/show";} }

有了@RequestMapping批注,我們可以再次考慮導(dǎo)航。 通常, <h:commandButton> , <h:button> , <h:commandLink>或<h:link>組件將用于觸發(fā)導(dǎo)航,例如:

<h:commandButton value="Go" action="select">

在此,當(dāng)用戶單擊"Go"按鈕時, "select"動作開始,并且導(dǎo)航規(guī)則用于查找目的地。 當(dāng)我們要遠(yuǎn)離定義導(dǎo)航XML時,我們需要另一種方法來查找MVC目標(biāo)。 稍微顛覆JSF對隱式導(dǎo)航的支持為我們提供了一種很好的方法。 通過一些集成代碼,我們可以支持特殊的"spring:"前綴,該前綴告訴JSF使用Spring MVC解析目標(biāo)。

<h:commandButton value="Go" action="spring:redirect:/spring/hotels/123"/>

上面的示例將使用在Spring MVC中注冊的ViewResolver解析"redirect:/spring/hotel/123" 。 在這種情況下, UrlBasedViewResolver將選擇"redirect:"并將使用RedirectView 。
很好,但是將酒店ID "123"硬編碼到視圖名稱中并不是很實際。 幸運的是有一個答案:

<h:commandButton value="Go" action="spring:redirect:/spring/hotels/{id}"><f:param name="id" value="#{resultItem.id}/> </h:commandButton>

commandButton所有<f:param>子標(biāo)記將用于構(gòu)造MVC視圖的模型。 在這種情況下,我們得到一個包含“ id=#{resultItem.id} ”的模型。 EL值表達(dá)式#{resultItem.id}將在呈現(xiàn)視圖之前解析。 Spring 3.1中的RedirectView類將處理URL模板變量,因此“ /spring/hotels/{id} ”將選擇“ id ”以呈現(xiàn)完整的URL。

使用上述方法的一點煩惱是您需要在XHTML文件以及@RequestMapping批注中定義URL。 作為替代方案,您可以使用特殊的“ @bean.method ”符號表示您要導(dǎo)航至指定控制器bean方法上的@RequestMapping的值:

<h:commandButton value="Go" action="spring:@hotelsController.show"><f:param name="id" value="#{resultItem.id}/> </h:commandButton>

如果在控制器bean上有多個@RequestMapping方法,則可以使用更短的語法“ @method ”(此處假定該bean是當(dāng)前處理程序)在它們之間進(jìn)行導(dǎo)航。 當(dāng)然,并非每種類型的@RequestMapping都可以反向轉(zhuǎn)換為URL,例如,如果您使用通配符,則此操作將無效。 建議是使您的映射盡可能簡單。
這種方法的最后一個好處是我們還可以逆轉(zhuǎn)DataBinder過程。 例如:

public class SearchCriteria implements Serializable {private String searchString;private int page;// ... getters / setters }@RequestMapping(value = "/hotels") public String list(SearchCriteria criteria, Model model) {// ... }<h:link outcome="spring:@list"><f:param name="sc" value="#{searchCriteria}"/> </h:link>

假定#{searchCriteria} EL表達(dá)式解析為包含字符串"California"的SearchCriteria對象,并且所構(gòu)建的URL的整數(shù)10將為"/spring/hotels?searchString=California&page=10" 。

如果您想查看該項目的代碼,可以在http://github.com/philwebb/springfaces上找到它。 如文章頂部所述,此代碼尚在開發(fā)中,因此請注意一些問題。 路線圖上的下一個任務(wù)是支持@NavigationMapping批注,該批注將允許以編程方式進(jìn)行導(dǎo)航。

參考: 集成Spring和JavaServer Faces: JCG合作伙伴 Phillip Webb的 導(dǎo)航 ? 在Phil Webb的Blog上 。


翻譯自: https://www.javacodegeeks.com/2012/03/spring-jsf-integration-navigation.html

總結(jié)

以上是生活随笔為你收集整理的Spring和JSF集成:导航的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。