Spring和JSF集成:转换器

使用任何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;
    ...
}

    

为了一次又一次地保存对相同转换器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 {
    ...
}

您还可以使用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

你可能感兴趣的:(字符串,java,spring,python,vue,ViewUI)