【发布时间】:2016-07-29 09:17:35
【问题描述】:
我正在使用 Play framework 2.5 和 Ebean 作为 ORM 开发一个带有内联编辑器的网站,并且我有一个新闻部分,管理员可以在其中编辑每条新闻(编辑标题、内容等内联字段)。
为了做到这一点,我将每个可以用 id 修改的 html 元素设置为新闻模型字段(例如,映射字段标题的 html 元素将具有 id="title"),然后当我从客户端接收数据时,我在控制器上使用反射将每个内容映射到正确的新闻字段。
代码如下(EditContent 是一个对象,其中包含每个修改内容的 id 和 htmlContent 等信息):
News news = News.find.byId(newsId);
for(EditContent content : pageContents.contents) {
Field field = news.getClass().getField(content.cssId);
field.setAccessible(true);
field.set(news, content.htmlContent);
}
news.update();
问题是似乎执行了更新,但实际上没有在 db 上更新值。使用调试器,我检查了对象新闻,我可以看到字段已正确修改,但随后更新对 db 没有影响。
另外,我注意到使用相同的代码:
News news = new News()
...
//reflection to save modifed contents in the new object
...
news.save()
按我的预期工作,在数据库中保存一个新行。
有什么想法吗?
提前感谢您的帮助!
【问题讨论】:
-
为什么需要使用反射?另外,当您更改 EditContent 对象时,您是否尝试保存它而不是新闻?
-
我想使用反射以避免显式设置每个新闻字段(并编辑代码控制器以防我更改模型)。我无法保存 EditContent 因为它只是新闻字段的一个子集,特别是它只包含修改的字段,还包含与 html 相关的其他信息,例如 cssId
-
嗨@lbaggi,你是怎么解决这个问题的?甚至有可能使它与反射一起工作吗?非常感谢您的回复,因为我遇到了完全相同的问题。谢谢
标签: java reflection playframework orm ebean