javascript
Spring和JSF集成:转换器
Spring 3引入了一個全新的轉換框架,該框架允許將任何類型的對象轉換為任何其他類型(只要注冊了適當的轉換器)。 基思·唐納德(Keith Donald)撰寫了有關新轉換過程如何工作的文章。 Spring MVC在版本3中也進行了更新,以在處理請求參數時使用轉換器服務,例如,將String參數傳遞給以下控制器方法:
@RequestMapping public void example(@RequestParam Integer value) 將導致StringToNumber轉換器(通過StringToNumberConverterFactory )運行以創建等效的Integer 。
與Spring不同,JSF中的轉換器僅處理對象與字符串之間的轉換。 javax.faces.convert.Converter接口定義了兩個方法: getAsString (在渲染時使用)將對象轉換為字符串,而getAsObject (在解碼回發時使用)將先前渲染的字符串轉換回對象。
默認情況下,可以通過將一個條目添加到faces-config.xml或使用@FacesConverter批注來向JSF注冊轉換器。 我一直在努力通過簡單地將它們聲明為Spring bean來注冊JSF轉換器。 與普通JSF相比,使用Spring bean具有許多優點。 例如,您可以輕松注入其他協作者bean,并且可以使用Spring AOP。 要使用轉換器bean,只需從JSF引用其ID:
@Component public class MyConverter implements Converter {@Autowireprivate MyHelper helper;... }<h:inputText value=”#{bean.value}”><f:converter converterId=”myConverter”/> </h:inputText>為了一次又一次地保存對相同轉換器ID的引用,JSF允許您為特定類“注冊”轉換器。 為了通過Spring支持這一點,引入了一個新的@ForClass批注:
@Component @ForClass(MyCustomType.class) public class MyConverter implements Converter {... }上面的示例將MyConverter每次MyCustomType對象需要轉換時使用MyConverter 。
為方便起見,我還提供了支持泛型的javax.faces.convert.Converter的變體。 org.springframework.springfaces.convert.Converter接口具有與標準JSF版本相同的簽名。 當將此接口與@ForClass一起使用時,您還可以省略注釋上的值:
@Component @ForClass public class MyConverter implements Converter<MyCustomType> {... }您還可以使用ConditionalForClass接口實現更復雜的“類”綁定(有關詳細信息,請參見JavaDoc )。
最后,還支持使用Spring MVC中的JSF轉換器(無論如何注冊)。 GenericFacesConverter是一個Spring ConditionalGenericConverter ,在注冊后會自動將其委派給JSF。
例如,假設為MyCustomType注冊了MyConverter則以下MVC映射將起作用:
@RequestMapping("/example") public void example(@RequestParam MyCustomType value) {.... }如果需要引用特定的JSF轉換器,也可以使用@FacesConverterId批注:
@RequestMapping("/example") public void example(@RequestParam @FacesConverterId("myOtherConverter") MyOtherCustomType value) {.... }如果您希望實際操作,請從展示應用程序中查看ConverterExampleController 。
參考: 集成Spring和JavaServer Faces: Phil Webb博客博客中我們JCG合作伙伴 Phillip Webb的轉換器 。
翻譯自: https://www.javacodegeeks.com/2012/06/spring-jsf-integration-converters.html
總結
以上是生活随笔為你收集整理的Spring和JSF集成:转换器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建信养老飞越366周末更新收益吗?
- 下一篇: 净值型理财产品赎回成功什么时间钱到账?