Я разрабатываю веб-сайт с встроенным редактором, используя Play Framework 2.5 и Ebean в качестве ORM, и у меня есть раздел новостей, в котором администратор может редактировать каждую новость (редактирование полей inline, таких как как заголовок, содержание и т. д.).
Для этого я устанавливаю каждый элемент html, который может быть изменен с идентификатором, равным полю модели новостей (например, элемент html, отображающий заголовок поля, будет иметь id = "title"), а затем, когда я получаю данные из клиент, я использую отражение на контроллере для сопоставления каждого контента с правильным полем новостей.PlayFramework 2.5 - Обновление Ebean с использованием отражения
Вот код (EditContent это объект, который содержит информацию, как Ид и 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, вы пытались сохранить его вместо новостей? – Salem
Я хочу использовать отражение, чтобы избежать явного задания каждого поля новостей (и для редактирования контроллера кода на случай изменения модели).Я не могу сохранить EditContent, потому что это только подмножество полей новостей, в частности, оно содержит только измененные поля, а также содержит другие данные относительно html, такие как cssId – lbaggi
Привет @lbaggi, как вы решили проблему? Можно ли даже заставить его работать с отражениями? Я бы очень признателен за ваш ответ, потому что у меня такая же проблема. Спасибо –