JSF bean中的动态字段

时间:2010-07-20 13:56:21

标签: java hibernate spring jsf

我想让我的客户端动态地在CMS中创建自己的字段和bean。

同样,一旦他创建了一个表单,我需要创建一个可以保存到数据库的Hibernate实体。

有办法吗?

我正在使用JSF2和Hibernate 3

重新编译而没有?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用List<String>作为字段名称,使用Map<String, Object>作为字段值。可以使用动态键在EL中访问地图,如下所示:

<ui:repeat value="#{bean.fieldnames}" var="fieldname">
    <h:inputText value="#{bean.fieldvalues[fieldname]}" /><br />
</ui:repeat>

完全不同的替代方法是使用ASM / Javassist等工具自动生成类,并动态创建数据库表。但这还有很多工作要做。

答案 1 :(得分:1)

动态创建表和实体是IMO不是一个好主意。 Hibernate并不是真的为此做出的,生成实体只是问题的小部分。您必须将它们添加到配置中,重建会话工厂,更新模型。然后重新启动应用程序呢?不推荐,只是忘记这种方法......

另一种选择是使用Entity-Attribute-Value (EAV)模型。这是许多CMS正在做的事情。我从来没有用Hibernate实现它,但它是可行的(并且已经完成)。以下是一些资源:

但说实话,我不会实现自己的CMS,而是重用现有的CMS。 One Hippo似乎是候选人。

另见

相关问题