javascript
jsf集成spring_Spring和JSF集成:转换器
jsf集成spring
使用任何Web框架時(shí),都不可避免地需要將用戶(hù)輸入的數(shù)據(jù)從String為其他類(lèi)型。 盡管Spring和JSF在設(shè)計(jì)和功能上確實(shí)有很大的不同,但它們都具有轉(zhuǎn)換器策略來(lái)處理此問(wèn)題。 讓我們從春天開(kāi)始。Spring 3引入了一個(gè)全新的轉(zhuǎn)換框架,該框架允許將任何類(lèi)型的對(duì)象轉(zhuǎn)換為任何其他類(lèi)型(只要注冊(cè)了適當(dāng)?shù)霓D(zhuǎn)換器)。 基思·唐納德(Keith Donald)撰寫(xiě)了有關(guān)新轉(zhuǎn)換過(guò)程如何工作的文章。 Spring MVC在版本3中也進(jìn)行了更新,以在處理請(qǐng)求參數(shù)時(shí)使用轉(zhuǎn)換器服務(wù),例如,將String參數(shù)傳遞給以下控制器方法:
@RequestMapping public void example(@RequestParam Integer value) 將導(dǎo)致StringToNumber轉(zhuǎn)換器(通過(guò)StringToNumberConverterFactory )運(yùn)行以創(chuàng)建等效的Integer 。 
 與Spring不同,JSF中的轉(zhuǎn)換器僅處理對(duì)象與字符串之間的轉(zhuǎn)換。 javax.faces.convert.Converter接口定義了兩個(gè)方法: getAsString (在渲染時(shí)使用)將對(duì)象轉(zhuǎn)換為字符串,而getAsObject (在解碼回發(fā)時(shí)使用)將先前渲染的字符串轉(zhuǎn)換回對(duì)象。 
默認(rèn)情況下,您可以通過(guò)將條目添加到faces-config.xml或使用@FacesConverter批注向JSF注冊(cè)轉(zhuǎn)換器。 我一直在努力允許您通過(guò)簡(jiǎn)單地將它們聲明為Spring bean來(lái)注冊(cè)JSF轉(zhuǎn)換器。 與普通JSF相比,使用Spring bean具有許多優(yōu)點(diǎn)。 例如,您可以輕松注入其他協(xié)作者bean,并且可以使用Spring AOP。 要使用轉(zhuǎn)換器bean,只需從JSF引用其ID:
@Component public class MyConverter implements Converter {@Autowireprivate MyHelper helper;... }<h:inputText value=”#{bean.value}”><f:converter converterId=”myConverter”/> </h:inputText>為了一次又一次地保存對(duì)相同轉(zhuǎn)換器ID的引用,JSF允許您為特定類(lèi)“注冊(cè)”轉(zhuǎn)換器。 為了通過(guò)Spring支持這一點(diǎn),引入了一個(gè)新的@ForClass批注:
@Component @ForClass(MyCustomType.class) public class MyConverter implements Converter {... }上面的示例在每次MyCustomType對(duì)象需要轉(zhuǎn)換時(shí)都將使用MyConverter 。
為了方便起見(jiàn),我還提供了支持泛型的javax.faces.convert.Converter的變體。 org.springframework.springfaces.convert.Converter接口具有與標(biāo)準(zhǔn)JSF版本相同的簽名。 當(dāng)將此接口與@ForClass一起使用時(shí),您還可以省略注釋上的值:
@Component @ForClass public class MyConverter implements Converter<MyCustomType> {... }您還可以使用ConditionalForClass接口實(shí)現(xiàn)更復(fù)雜的“類(lèi)”綁定(有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn)JavaDoc )。
最后,還支持使用Spring MVC中的JSF轉(zhuǎn)換器(無(wú)論如何注冊(cè))。 GenericFacesConverter是一個(gè)Spring ConditionalGenericConverter ,在注冊(cè)后會(huì)自動(dòng)委托給JSF。
例如,假設(shè)為MyCustomType注冊(cè)了MyConverter則以下MVC映射將起作用:
@RequestMapping("/example") public void example(@RequestParam MyCustomType value) {.... }如果需要引用特定的JSF轉(zhuǎn)換器,也可以使用@FacesConverterId批注:
@RequestMapping("/example") public void example(@RequestParam @FacesConverterId("myOtherConverter") MyOtherCustomType value) {.... }如果您想了解這一點(diǎn),請(qǐng)從展示應(yīng)用程序中查看ConverterExampleController 。
參考: 集成Spring和JavaServer Faces: Phil Webb博客博客中我們JCG合作伙伴 Phillip Webb的轉(zhuǎn)換器 。
翻譯自: https://www.javacodegeeks.com/2012/06/spring-jsf-integration-converters.html
jsf集成spring
總結(jié)
以上是生活随笔為你收集整理的jsf集成spring_Spring和JSF集成:转换器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 物联网项目:将Arduino连接到Ubi
- 下一篇: 策略游戏安卓单机(策略游戏安卓)
