簡體   English   中英

@ModelAttribute與Spring MVC中的抽象類

[英]@ModelAttribute with an abstract class in Spring MVC

我正在嘗試將表單數據從JSP提交到控制器,並將數據綁定到基於表單中“類型”字段的抽象類的兩種實現之一。 我看到這篇文章聽起來很有希望,但是在創建並注冊了轉換器之后,它並沒有被調用: @ModelAttribute和抽象類

我想念什么? 接線對我來說似乎是正確的,但這也是我第一次嘗試進行配置。

當我提交表單數據時,我的控制器拋出此異常: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.project.types.Food]: Is it an abstract class?

這是抽象的類結構:

abstract Food
String type

Banana extends Food
Apple extends Food

這是我的控制器:

@RequestMapping(value = "/web/pickFood", method = RequestMethod.POST)
    public ModelAndView foodSubmit(@ModelAttribute("food") Food food) {...}

我的轉換器:

public class FoodConverter implements Converter<String, Food> {

    @Override
    public Food convert(String type) {
        Food food = null;
        switch (type) {
            case "banana":
                food = new Banana();
                break;
            case "apple":
                food = new Apple();
                break;
            default:
                throw new IllegalArgumentException("Unknown food type:" + type);
        }
        return food;
    }
}

我如何注冊轉換器:

@Configuration
@EnableWebMvc
public class FoodWebMvCContext extends WebMvcConfigurerAdapter {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new FoodConverter());
    }
}

現在我只想提交JSP上的表單,然后將其轉換為該類型的空食物對象。

<form:form method="POST"
                   action="/web/pickFood"
                   modelAttribute="food">
            <table>
                <tr>
                    <td><form:label path="type">Type</form:label></td>
                    <td><form:input path="type" name="food"/></td>
                </tr>
            </table>
 </form:form>

我可以通過將表單的輸入更改為

<tr>
    <td><form:label path="type">Type</form:label></td>
    <td><form:input path="type" name="food"/></td>
</tr>

<tr>
    <input type="text" name="food" />
</tr>

暫無
暫無

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

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