在 JSF 页面中,我必须显示来自实体的数据。该实体有一些 int 字段,不能直接显示,需要翻译成描述性字符串。在它们之间,一些可以有有限数量的值,另一些有很多可能的值(例如 wordlwide Country_ID),并且值得在 Db 上使用关联(ID、描述)表。
后一种情况可以很容易地通过从原始实体到与字典表(ID,描述)对应的实体的关系导航来解决,但我不想引入新实体只是为了解决从 ID 到描述的翻译。
另外还有一个整数字段有特殊需求:十万个数要按照100015 -> A00015, 301023 -> C01023等规则换成字母。
最初我将翻译代码放在实体本身中,但我知道这个解决方案的巨大局限性和缺点。
然后,我创建了一个单音 ( EntityTranslator ),其中包含翻译不同字段的所有方法。对于字段值很多的情况,我将它们放在从单调加载并在TreeMap中转换的表中,否则描述在类内的数组中。
在ManagedBean 中,我为EntityTranslator编写了一个 getter,在 jsf 中我使用了很长的 el 语句,如下所示:
#{myManagedBean.entityTranslator.translateCountryID(myManagedBean.selectedEntity.countryID)}
我认为这个问题很普遍,我正在寻找一种标准的方法来解决它,但是,如前所述,我不想创建新的“愚蠢”实体只是为了将 ID 与描述相关联,我认为它是矫枉过正。
另一种可能性是使用转换器 Object(Integer) <-> String 但我更愿意在同一个类中拥有实体的所有翻译需求。