使用任何Web框架时,都不可避免地需要将用户输入的数据从String为其他类型。 尽管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集成:转换器相关推荐

  1. Spring和JSF集成:MVC螺母和螺栓

    过去,我曾尝试将JSF与Spring MVC集成在一起,尽管我的第一次尝试成功了,但这远非理想. 这次,我决定做出一些关键决定来帮助我集中精力: 向后兼容. 支持JSF 1.2涉及的工作太多,而Spr ...

  2. Spring和JSF集成:异常处理

    大多数JSF开发人员都会熟悉"发生错误"页面,当在他们的代码某处引发意外异常时,该页面就会显示. 该页面在开发时确实很有用,但对于生产应用程序通常不是您想要的. 通常,在用库存JS ...

  3. Spring和JSF集成:分页

    处理大型数据集时,通常需要以分页格式显示数据. 分页是一个有趣的问题,因为它倾向于跨越应用程序的所有层,从视图层通过应用程序服务一直到对数据库的原始调用. 在获取分页数据时,有一些非常好的解决方案. ...

  4. Spring和JSF集成:选择项目

    使用JSF,要使用组合框,列表框和复选框,您需要了解javax.faces.model.SelectItem类. SelectItem表示单个可选选项. 它既包含渲染所需的信息,又包含选择该项目时应绑 ...

  5. Spring和JSF集成:国际化和本地化

    如果您正在开发针对多种语言的JSF应用程序,那么您可能很熟悉<f:loadBundle>标记. 即使您的应用程序不支持使用消息包的国际化仍然是一个好主意. 在<f:loadBundl ...

  6. Spring和JSF集成:动态导航

    通常,您的JSF应用程序将需要超越基本的静态导航并开始做出动态导航决策. 例如,您可能想根据用户的年龄重定向他们. 大多数JSF教程建议通过将命令的action属性绑定到支持bean来实现动态导航: ...

  7. Spring和JSF集成:导航

    我希望这是有关我在Spring和JavaServer Faces之间提供深度集成的努力的一系列博客中的第一篇. 这里提到的所有内容都是"正在进行中的工作",因此,如果您签出代码,请 ...

  8. jsf集成spring_Spring JSF集成

    jsf集成spring Welcome to Spring JSF integration tutorial. JSF is a component based framework with grea ...

  9. jsf集成spring_Spring和JSF集成:转换器

    jsf集成spring 使用任何Web框架时,都不可避免地需要将用户输入的数据从String为其他类型. 尽管Spring和JSF在设计和功能上确实有很大的不同,但它们都具有转换器策略来处理此问题. ...

最新文章

  1. 1.STM32中对LED_GPIO_Config()函数的理解(自定义)之流水灯
  2. “2021ISIG中国产业智能大会低代码峰会”即将开幕,钉钉宜搭叶周全受邀出席
  3. centos 7下Hadoop 2.7.2 伪分布式安装
  4. 干货 | 大公司机器学习算法的面试经验
  5. TreeMap按key排序
  6. oCam(屏幕录制) 一款小巧方便的专业屏幕录制软件 彻底解决你的录屏问题
  7. 如何在Web上直接浏览大规模OSGB格式倾斜模型(二):转换OSGB
  8. brctl tunctl 虚拟网卡 桥接
  9. python中numpy下载问题
  10. 8位数码管动态扫描显示c语言,proteus仿真之8位数码管动态扫描显示试验
  11. 音频变压器阻抗匹配及案例
  12. 真正决定人生高度的,是你做事的速度
  13. always_comb,always_ff,和always_latch语句
  14. 华为云、百度云 群控系统开发流程
  15. FrameMaker 格式的本地化流程
  16. K-Stack 2021牛客多校2
  17. 阿里巴巴(Alibaba)笔试编程题
  18. win10如果虚拟化服务器,win10虚拟化服务器配置
  19. 转载--video标签在微信内置浏览器和QQ浏览器(手机端)的怪异现象
  20. HTML期末大作业课程设计~仿阴阳师游戏官网首页html模板(HTML+CSS)~动漫主题html5网页模板-HTML期末作业课程设计期末大作业动漫主题html5网页模板-html5网页设计源码

热门文章

  1. 静态资源Css基础语法
  2. drools 规则流_约束流–没有Drools规则语言的现代Java约束
  3. cuba 平台_认识CLI for CUBA平台
  4. gradle跟pom_Gradle多项目构建–父pom式结构
  5. java程序设置jvm_Java程序员应在2018年学习的3种JVM语言
  6. java中的jpa_在JPA中处理Java的LocalDateTime
  7. kafka connect_Kafka Connect在MapR上
  8. 用于字符串和数组的5种简单有效的Java技术
  9. Java正成为COBOL的一部分-它将成为COBOL的一部分吗?
  10. java heroku_Neo4j Java Rest绑定入门(Heroku部署)