Невозможно связать форму с объектом

1

Я пытаюсь создать простую форму. Я следую примерам в игре для java-книги. Проблема в том, что когда я отправляю свою форму, он создает новый объект продукта, однако значения в объекте продукта равны NULL. Они не заданы значениями, заполненными в форме. Другими словами, форма, похоже, не связана с классом продукта.

Вывод

Saved product null - null

Вид формы html

@(productForm: Form[Product]) 
@import helper._ 
@import helper.twitterBootstrap._ 

@main("Product form") {
<h1>Product form</h1>
@helper.form(action = routes.Products.save()) {
    <fieldset>
        <legend>Product (@productForm("name").valueOr("New"))</legend>
        @helper.inputText(productForm("ean"), '_label -> "EAN")
        @helper.inputText(productForm("name"),'_label -> "Name")
        @helper.textarea(productForm("description"), '_label ->     "Description")
    </fieldset>
    <input type="submit" class="btn btn-primary" value="Save">
    <a class="btn" href="@routes.Products.list()">Cancel</a>
} 
}

Класс контроллера

package controllers;

import java.util.List;

import models.Product;
import play.data.Form;
import play.mvc.Controller;
import play.mvc.Result;
import views.html.products.list;
import views.html.products.details;

public class Products extends Controller {

public static Form<Product> productForm = Form.form(Product.class);

public static Result index() {
    return ok();
}
public static Result list() {
    List<Product> products = Product.findAll();
    return ok(list.render(products));
}

public static Result save() {
    Form<Product> boundForm = productForm.bindFromRequest();
    Product product = boundForm.get();
    product.save();
    return ok(String.format("Saved product %s", product));
}

public static Result newProduct() {
    return ok(details.render(productForm));
}

public static Result details(String ean) {
    return TODO;
}



}

Класс продукта

package models;

import java.util.ArrayList;
import java.util.List;

public class Product {

public String ean;

public String name;

public String description;

private static List<Product> products;
static {
    products = new ArrayList<Product>();
    products.add(new Product("1111111111111", "Paperclips 1",
            "Paperclips description 1"));
    products.add(new Product("2222222222222", "Paperclips 2",
            "Paperclips description "));
    products.add(new Product("3333333333333", "Paperclips 3",
            "Paperclips description 3"));
    products.add(new Product("4444444444444", "Paperclips 4",
            "Paperclips description 4"));
    products.add(new Product("5555555555555", "Paperclips 5",
            "Paperclips description 5"));
}

public Product() {
}

public Product(String ean, String name, String description) {
    this.ean = ean;
    this.name = name;
    this.description = description;
}

public static List<Product> findAll() {
    return new ArrayList<Product>(products);
}

public static Product findByEan(String ean) {
    for (Product candidate : products) {
        if (candidate.ean.equals(ean)) {
            return candidate;
        }
    }
    return null;
}

public static List<Product> findByName(String term) {
    final List<Product> results = new ArrayList<Product>();
    for (Product candidate : products) {
        if (candidate.name.toLowerCase().contains(term.toLowerCase())) {
            results.add(candidate);
        }
    }
    return results;
}

public static boolean remove(Product product) {
    return products.remove(product);
}

public void save() {
    products.remove(findByEan(this.ean));
    products.add(this);
}

public String toString() {
    return String.format("%s - %s", ean, name);
}




 }
Теги:
playframework

1 ответ

0
Лучший ответ

По-видимому, бегущая play clean его. Я, однако, не знаю, почему.

  • 1
    Я столкнулся с парой проблем, которые не будут решены, пока я не начну play clean . Это мой поступок, когда вещи не работают, когда я думаю, что они должны.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню