簡體   English   中英

Java playFramework2:如何在發布前將值放入表單字段

[英]Java playFramework2: how to put value to form field before post

我有報告實體。 我不知道誰填寫了報告。 我想將用戶ID從會話添加到表單類。

我已經嘗試過以下方法:綁定,填充, 但找不到有效的解決方案。 Ofcorse我的意思是表單類:play.data.Form.form

我該如何實現? 請幫忙。

這是我的方法(寫這篇文章時):

static Form<Registry> modelForm = form(Registry.class);

Registry registry = new Registry();
registry.creationUser = User.getCurrentUser();
registry.test="tt";
modelForm.fill(registry);
modelForm.bind(data, allowedFields)

我的提交方法

@Transactional
public static Result submit() {
    modelForm = modelForm.bindFromRequest();
    if (modelForm.hasErrors()) {
        return badRequest(views.html.Registry.form.render(modelForm));
    } else {
        modelForm.get();
    }
    registry.creationUser = User.getCurrentUser();
    modelForm.fill(registry);

    if (modelForm.hasErrors()) {
        Logger.debug(modelForm.toString());
        return badRequest(views.html.Registry.form.render(modelForm));
    } else {
        modelForm.get().toDataBase();
        toLog("success", "Succefully added new Report");
        flash("success", "Pomyślnie dodano.");
        return redirect(routes.Index.index());
    }
}

假設您有一個Report模型,例如:

public Date date;
public User user;
public String message;

您需要先創建並填充一個對象(不保存到數據庫!),然后用它填充表單,例如:

Report report = new Report(); // constructors params are welcome here
report.user = loggedUser;
report.date = new Date();

Form<Report> reportForm = Form.form(Report.class).fill(report);

// OR
Form<Report> reportForm = Form.form(Report.class);
reportForm = reportForm().fill(report);

// NOT
Form<Report> reportForm = Form.form(Report.class);
reportForm().fill(report); // Wrong!

return ok(reportCreatingView.render(reportForm));

編輯:您不需要在第一步中填寫用戶數據,因為實際上您可以在綁定后添加用戶數據,所以您的submit()操作中包含太多行,請保持簡單:)

public static Result submit() {

    User user = User.getCurrentUser();
    if (user == null) return unauthorized("You must log in");

    modelForm = modelForm.bindFromRequest();

    if (modelForm.hasErrors()) {
        return badRequest(views.html.Registry.form.render(modelForm));
    } 

    // At this point you have a logged User obj which is not null, 
    // you have modelForm without errors (checked previously) 
    // so you need to only add the user to form and save it.

    Registry registry = modelForm.get();    
    registry.creationUser = user;
    registry.save();

    flash("success", "Twój log został zapisany w bazie.");
    return redirect(routes.Index.index());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM