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

jsf集成spring

使用任何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 {
    @Autowire
    private 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 {
    ...
}

上面的示例在每次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

jsf集成spring

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值