Весна.ModelAttribute.GetMapping.THYMELEAF - PullRequest
0 голосов
/ 19 февраля 2019

Программа не может разрешить объекты, которые я передаю в html от контроллера.

Модель

public class Taco {

    private String name;
    private List<String> ingredients;
}

Ингредиент

public class Ingredient {

    private final String id;
    private final String name;
    private final Type type;



    public static enum Type {
        WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
    }

}

В контроллере.Я пробовал разные варианты ModelAttribute в разных методах, следовал много примеров.Но HTML все еще не может разрешить.

@Slf4j
@Controller
@RequestMapping("/design")
public class DesignTacoController {



public void addIngredientsToModel(Model model) {
    List<Ingredient> ingredients = Arrays.asList(
            new Ingredient("FLTO", "Flour Tortilla", Type.WRAP),
            new Ingredient("COTO", "Corn Tortilla", Type.WRAP),
            new Ingredient("GRBF", "Ground Beef", Type.PROTEIN),
            new Ingredient("CARN", "Carnitas", Type.PROTEIN),
            new Ingredient("TMTO", "Diced Tomatoes", Type.VEGGIES),
            new Ingredient("LETC", "Lettuce", Type.VEGGIES),
            new Ingredient("CHED", "Cheddar", Type.CHEESE),
            new Ingredient("JACK", "Monterrey Jack", Type.CHEESE),
            new Ingredient("SLSA", "Salsa", Type.SAUCE),
            new Ingredient("SRCR", "Sour Cream", Type.SAUCE)
    );

    Type[] types = Ingredient.Type.values();
    for (Type type : types) {
        model.addAttribute(type.toString().toLowerCase(),
                filterByType(ingredients, type));
    }
}


@GetMapping
@ModelAttribute("design")
public String showDesignForm(Model model) {
    addIngredientsToModel(model);
    model.addAttribute("design", new Taco());
    return "design";
}


private List<Ingredient> filterByType(
        List<Ingredient> ingredients, Type type) {
    return ingredients
            .stream()
            .filter(x -> x.getType().equals(type))
            .collect(Collectors.toList());
}}

Теперь часть design.html.Не могу разрешить белок, ингредиент.ид, ингредиент.имя.Как я могу это исправить?Я пробовал разные способы:

<form method="POST" th:object="${design}">
   <div>
        <h3>Pick your protein:</h3>
        <div th:each="ingredient : ${protein}">
            <input name="ingredients"
            type="checkbox"th:value="${ingredient.id}" />
            <span th:text="${ingredient.name}">INGREDIENT</span><br/>
        </div>
    </div>

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Вы должны добавить геттеры и сеттеры для тако и ингредиентов.Если вы используете Lombok, вы можете добавить аннотацию на уровне класса @Data.Ломбок сгенерирует его автоматически.

@Data
public class Taco {

private String name;
private List<String> ingredients;
}
0 голосов
/ 19 февраля 2019

Я не вижу конструктор, определенный для классов Ingredients или Taco.Если вы не включили это в вопрос и получаете сообщение об ошибке POST, попробуйте заменить @RequestMapping(value = "/design") на @RequestMapping(value = "/design", method = RequestMethod.POST)

0 голосов
/ 19 февраля 2019

Это исключение?Теперь мне кажется, что у вас есть @GetMapping, и вы пытаетесь отправить форму.Попробуйте изменить @GetMapping на @ PostMapping.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...