姬長信(Redy)

何时在JSF中命名转换器


我一直在使用PrimeFaces SelectOneMenu对象中的转换器.如果我只告诉转换器是指哪个类,它们就可以正常工作:

@FacesConverter(forClass = DescriptorVO.class)
public class DescriptorVOConverter implements Converter { ... }

这样,当用类DescriptorVO的对象填充该转换器时,我不必明确告诉JSF组件应使用哪个转换器.

但是,我制作了一个使用p:SelectManyCheckbox的页面,我一生都无法知道为什么它没有调用转换器.然后我给它起了一个名字,就像这样:

@FacesConverter(forClass = RoleVO.class, value = "roleVOConverter")
public class RoleVOConverter implements Converter { ... }

并将其作为组件的属性之一传递


    

瞧,它开始正确地调用转换器.这给我提出了一个问题,即何时应该为转换器命名(通过value属性),何时告诉转换器应该与哪个类一起使用(通过forClass属性)就足够了.使用PrimeFaces时,我从来不需要命名任何转换器,仅针对此特定的SelectManyCheckbox组件.不同的组件在转换器方面的需求是否不同,或者我只是对转换器的概念有误?