0

私が使用するコントローラには更新機能があります:

public static Result updateCustomer(Long id) {
    Form<CustomerData> customerDataForm = form(CustomerData.class)
            .bindFromRequest();

    if (customerDataForm.hasErrors()) {
        return badRequest(views.html.admin.customerFormEdit
                .render(customerDataForm));
    }
    customerDataForm.get().update(id);
    flash("success", "Customer " + customerDataForm.get().customerName
            + " has been updated");
    return CLIENT_HOME;
}

ただし、空の入力テキスト値は保存されません。チェックされていないチェックボックスも保存されません。

チェックボックスをオンにするか、任意のフィールドに任意の値を入力すると、更新時に保存されますが、空の入力またはチェックボックスをオフにした場合、更新時に以前に保存された値は削除されません。

どうすればこれを解決できますか?

4

1 に答える 1

0

次の例は、入力またはチェックされている/チェックされていないチェックボックスの空の値を保存/更新できることを示しています。

コントローラー:

public static Result editCustomer() {
    // find CustomerData, Note: this use hard coded ID
    CustomerData customerData = CustomerData.find.byId(1L); 
    Form<CustomerData> customerDataForm = Form.form(CustomerData.class)
        .fill(customerData);

    return ok(views.html.editCustomer.render(customerDataForm));
}

public static Result updateCustomer() {
    Form<CustomerData> customerDataForm = Form.form(CustomerData.class)
        .bindFromRequest();

    if (customerDataForm.hasErrors()) {
        return badRequest(editCustomer.render(customerDataForm));
    }
    CustomerData customerData = customerDataForm.get();

    // update data, Note: this use hard coded ID
    customerData.update(1L);
    flash("success", "Customer ID " + customerData.id + " has been updated");

    return redirect(routes.Application.editCustomer());
}

モデル:

@Entity
public class CustomerData extends Model {
    @Id
    public Long id;
    public String name;
    public boolean isMember;

    public static Finder<Long, CustomerData> find = new Finder<>(
        Long.class, CustomerData.class
    );
}

ビュー:

@(customerDataForm: Form[models.CustomerData])
@import views.html.helper._

@main(title = "Edit Customer Data") {
    @form(routes.Application.updateCustomer()) {
        @*** Note: this use hard coded ID ***@
        <input type="hidden" name="id" value="1">
        @inputText(customerDataForm("name"), 'label -> "Customer Name")
        @checkbox(customerDataForm("isMember"))

        <input type="submit" value="Submit">
    }
}

これが役立つことを願っています。:)

于 2013-04-24T13:02:18.047 に答える