Это было менее очевидно, что? Я хотел - я из школы, где вы «скрываете» идентификатор в форме, в каком-то скрытом поле или что-то вроде этого.
Возможно, в кодовой базе play-bootstrap есть отличный способ сделать это, но я не видел ее в документации - так вот, мой друг, это как взять какой-то объект, сделать форму для него, а затем может обновить это objext.
Я оставил код db вне, для краткости.
Прежде всего, вот мое действие - в моем классе контроллера, которое получает мою модель из базы данных. Обратите внимание, что используемая мной модель поддержки такая же, как и для базы данных, с частными полями и т. Д. (Знаете, это просто общий POJO).
public Result editLesson(int languageId){
Form<Language> languageForm = formFactory.form(Language.class);
try {
//here da is just how i get things from the database.
Language language = da.getLanguage(languageId);
languageForm = languageForm.fill(language);
} catch (SQLException e){ //SAD! }
return ok(editLesson.render(languageForm));
}
Уход. Так что просто получает форму и надувает ее на какую-то страницу, чтобы ее увидеть. Обратите внимание, что formFactory необходимо вводить волшебным образом в ваш контроллер. Затем, как выглядит страница?
Ну, это обычный шаблон, только:
меня это как моя первая линия: @import b3.vertical.fieldConstructor
и где я хочу, чтобы показать форму я
@b3.form(routes.HomeController.saveLesson) {
@b3.hidden("id", languageForm("id").value, 'attr -> false)
@b3.text(languageForm("name"), '_label -> "Title", 'placeholder -> "The Title")
@b3.text(languageForm("description"), '_label -> "Description", 'placeholder -> "The Description")
@b3.submit('class -> "btn btn-default"){ <span class="glyphicon glyphicon-ok"></span> Save }
}
Ok, поэтому здесь мы имеем форму - это говорит о форме, куда идти (мы рассмотрим маршруты за 5 секунд) и разместим редактируемые поля. Я установил здесь поле id. Мне не было интуитивно понятно, как получить к нему доступ - но вот вы где.
Мои маршруты файл имеет следующее:
GET /edit-lesson/:languageId controllers.HomeController.editLesson(languageId: Integer)
POST /save-lesson/ controllers.HomeController.saveLesson()
Первая строка, как я начала редактирования страниц. Во второй строке я хочу пойти, чтобы сохранить эти отредактированные уроки. Я использую routes.HomeController.saveLesson
для обратного отсчета для сохранения. Если ваш контроллер называется Bob (немое имя), вместо этого вы должны использовать routes.Bob.saveLesson
для ссылки на метод saveLesson
.
Наконец, мой saveLesson код выглядит следующим образом (в Бобе ~ ERM, HomeController)
public Result saveLesson(){
Form<Language> languageForm = formFactory.form(Language.class).bindFromRequest();
if (languageForm.hasErrors()){
return badRequest(editLesson.render(languageForm));
} else {
Language language = languageForm.get();
try {
da.saveLanguage(language);
return ok(share.render());
} catch (SQLException e){
//TODO: log this, but really we don't have much to do, do we?
return ok(e.getMessage());
}
}
}
Примечания связывания данных перепутались в Play - если форма содержит ошибки, то вызов .get()
потерпит неудачу, поэтому в случае, если в вашем контроллере по какой-то причине вы хотите получить некоторые данные формы, вам нужно проверить, имеет ли форма ошибку - если это не так, сделайте что угодно. Если это делает, вам нужно использовать .field(String).value()
на объекте формы, вы не можете преобразовать объект формы в привязку (через get()
). ~ Это немного отличается на странице scala, но не на странице java!