我想让我的客户端动态地在CMS中创建自己的字段和bean。
同样,一旦他创建了一个表单,我需要创建一个可以保存到数据库的Hibernate实体。
有办法吗?
我正在使用JSF2和Hibernate 3
重新编译而没有?
答案 0 :(得分:1)
最简单的方法是使用List<String>
作为字段名称,使用Map<String, Object>
作为字段值。可以使用动态键在EL中访问地图,如下所示:
<ui:repeat value="#{bean.fieldnames}" var="fieldname">
<h:inputText value="#{bean.fieldvalues[fieldname]}" /><br />
</ui:repeat>
答案 1 :(得分:1)
动态创建表和实体是IMO不是一个好主意。 Hibernate并不是真的为此做出的,生成实体只是问题的小部分。您必须将它们添加到配置中,重建会话工厂,更新模型。然后重新启动应用程序呢?不推荐,只是忘记这种方法......
另一种选择是使用Entity-Attribute-Value (EAV)模型。这是许多CMS正在做的事情。我从来没有用Hibernate实现它,但它是可行的(并且已经完成)。以下是一些资源:
但说实话,我不会实现自己的CMS,而是重用现有的CMS。 One Hippo似乎是候选人。