JSF显示具有ID的实体:如何将ID转换为描述?

时间:2013-10-03 06:49:18

标签: jsf entities

在JSF页面中,我必须显示来自实体的数据。 此实体具有一些无法直接显示但需要转换为描述性字符串的int字段。 在它们之间,一些可以具有有限数量的值,另一些具有许多可能的值(例如wordlwide Country_ID)并且在Db上具有关联(ID,描述)的表。

后一种情况可以很容易地通过关系从原始实体导航到对应于字典表(ID,描述)的实体来解决,但我不想引入新实体来解决从ID到描述的翻译。 / p>

除了另一个整数字段有特殊需要之外:根据100015 - >等规则,应该用字母改变十万个数字。 A00015,301023 - > C01023。

最初我将翻译代码放在实体本身,但我知道这个解决方案的巨大限制和缺点。

然后我创建了一个单一的( EntityTranslator ),其中包含了翻译不同字段的所有方法。对于字段值很多的情况,我将它们放在一个表中,该表从单一单元加载并在 TreeMap 中转换,否则描述在类中的数组中。

ManagedBean 中,我为 EntityTranslator 编写了一个getter,在jsf中我使用了很长的el语句,如下所示:

#{myManagedBean.entityTranslator.translateCountryID(myManagedBean.selectedEntity.countryID)}

我认为这个问题非常普遍,我正在寻找一种解决问题的标准方法,但是,如前所述,我不想创建新的'愚蠢'实体,只是为了将ID与描述相关联,我认为这是矫枉过正。

另一种可能性是使用转换器Object(Integer)< - >字符串,但我更愿意在同一个类中满足实体的所有翻译需求。

1 个答案:

答案 0 :(得分:0)

您的问题归结为以下简单的界限:

  

如何在视图中显示与我的实体的id不同的字段,以及如何将整数字段变形为更有意义的字段。

答案是,这取决于具体情况。

如果您只想输入/输出数据,除了可能的视图参数?id=12345之外,您根本不需要ID。在这种情况下,您可以在视图中输入/输出任何内容:id始终存在。

如果你想创建一个新的实体,你最有可能通过JPA或数据库生成id,或者除了用户的直接输入之外。在这种情况下,你也不需要弄乱ID。

如果您想使用其他实体的信息,例如show user,则可以使用下拉框在国家/地区列表中,您始终可以选择将label(让它成为名称)和value(让它为id)分开,或者甚至在您的国家/地区名称中包含一个唯一的非空列数据库表,将用作自然标识符。如果您想使用输入文本字段从用户获取数据,您始终可以创建一个转换器,用于将用户输入字符串转换为实际的实体对象。

关于整数的转换,您实际上有多种选择:第一种是为这些字段附加一个转换器,大致进行301023 -> C01023C01023 -> 301023转换,第二个一个是编写自定义EL函数,第三个是事先准备好正确的模型/即时进行转换。