为什么要打扰转换器?

Why Bother With Converters?

balusc 提供了关于如何使用 JSF 转换器以及为什么需要转换的明确答案 here 但我的问题是为什么要麻烦?一个额外的 class 专用于转换对我来说似乎有点臃肿。为什么不简单地让支持 bean 的 setSelectedXXX() 方法接受字符串而不是对象,并在那里而不是在 Converter.getAsObject() 中进行转换?事实上,我似乎更清楚地命名支持 bean 的 setSelectedXXX() 方法,如 setSelectedXXXByName() 或 setSelectedXXXById()。

我的具体问题是我的支持 bean 包含我需要迭代的 selectItems 列表以按名称或 ID 找到所需的项目,而不是 Converter class。当然转换器可以调用 backingBean.getXXX() 来获取这个列表,但是在支持 bean 之外的逻辑对我来说似乎是分裂的。我失踪有充分的理由吗?

Why Bother With Converters?

因为优秀的软件开发人员会为Law of Demeter而烦恼。

In fact it seems clearer to me to name the backing bean's setSelectedXXX() methods like setSelectedXXXByName() or setSelectedXXXById().

事实上,在您碰巧需要执行完全相同的转换的另一个支持 bean 中,此类方法的可重用性并不是很好。因此,此类方法容易被复制粘贴,进而违反 DRY and KISS.

只需使用 BaseEntityConverter or omnifaces.SelectItemsConverter 即可拥有一个转换器,您无需为之操心。