PlayFramework java 和 play ~ bootstrap 助手

PlayFramework java and that play ~ bootstrap helper

谁能给我一个简单形式的例子,当给定一个简单的对象时,您可以点击保存并知道它具有保存该对象所需的所有数据(包括 ID?)

使用游戏found here

(这只是一个占位符,所以我可以 post 回答 - 为什么没有人喜欢给出在他们的框架中工作的例子?唉)

我想要的不太明显 - 我来自学校,你 "hide" 表单中的 id,在某种隐藏字段或类似的地方。

也许 play-bootstrap 代码库有一些巧妙的方法来做到这一点,但我没有在文档中看到它 - 所以我的朋友,这里是如何获取一些对象,制作一个表格为此,然后能够更新该对象。

为简洁起见,我省略了数据库代码。

首先,这是我的操作 - 在我的控制器中 class - 从数据库中获取我的模型。请注意,我使用的支持模型与数据库相同 returns,具有私有字段等。(所以,你知道,只是一个通用的 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 }
}

好的,所以我们有了表单 - 它告诉表单去哪里(我们将在 5 秒内查看路线),并放置可编辑的字段。我在这里将 id 字段设置为隐藏。如何访问它对我来说并不直观 - 但你就是这样。

我的路线文件有这个:

GET     /edit-lesson/:languageId    controllers.HomeController.editLesson(languageId: Integer)
POST    /save-lesson/               controllers.HomeController.saveLesson()

第一行是我如何开始编辑页面。第二行是我想去保存这些编辑过的课程的地方。我使用 routes.HomeController.saveLesson 反向指向保存课程。如果您的控制器称为 Bob(愚蠢的名字),您将改为使用 routes.Bob.saveLesson 到 link 到 saveLesson 方法。

最后,我的 saveLesson 代码看起来像这样(在 Bob ~ 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())~这个有点exlpained在 scala 页面上,但不在 java 页面上!