无法绑定百里香形式的请求元素

时间:2016-02-02 20:52:26

标签: java spring spring-mvc thymeleaf

我试图创建一个简单的SpringMVC / thymeleaf项目。我已经完成了我的存储库,域和控制器,只保留了前端。问题是,我似乎无法创建一个新对象,Spring会在我身上弹出一个Failed to bind request element exception。 到目前为止,我的代码是这样的(这是一个子集) 我的郎域类

@Entity
public class Lang {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "lang_id")
    private Integer id;

    private String lang;

    public Lang(){}

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLang() {
        return lang;
    }

    public void setLang(String lang) {
        this.lang = lang;
    }
}

我的控制器保存了保存呼叫

@RequestMapping(value = "/lang/save")
public String saveLang(Lang lang){
    langService.saveLang(lang);
    return "redirect:/lang/"+lang.getId();
}

我的服务实施

@Service
public class LangServiceImpl implements LangService{
    private LangRepository langRepository;

    @Autowired
    public void setLangRepository(LangRepository langRepository){
        this.langRepository = langRepository;
    }

    @Override
    public Iterable<Lang> listAllLanguages() {
        return langRepository.findAll();
    }

    @Override
    public Lang getLangById(Integer id) {
        return langRepository.findOne(id);
    }

    @Override
    public Lang saveLang(Lang lang) {
        return langRepository.save(lang);
    }

    @Override
    public void deleteLang(Integer id) {
        langRepository.delete(id);
    }
}

和我的百里香形式

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head lang="en">

    <title>CGI-security-KnowledgeBase</title>
    <!--/*/ <th:block th:include="fragments/headerinc :: head"></th:block> /*/-->
</head>
<body>
<div class="container">
    <!--/*/ <th:block th:include="fragments/header :: header"></th:block> /*/-->

    <h2 class="center">Language details</h2>
    <div>
        <form class="form-horizontal" th:object="${language}" th:action="@{/lang/save}" method="get">
            <input type="hidden" th:field="*{id}"/>
            <div class="form-group">
                <label class="col-sm-2 control-label">Language value:</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control" th:field="*{lang}"/>
                </div>
            </div>
            <div class="row">
                <button type="submit" class="btn btn-default">Submit</button>
            </div>
        </form>
    </div>
</div>
</body>
</html>

我已经完成了对我的存储库的测试(我可以保存和获取),并且我可以在春季启动时使用loader在我的h2实例中注入数据。问题仅出在表单提交上。我是春天的新人,完全迷失在这里。

它返回的错误是

  

Tue Feb 02 15:39:42 2016   出现意外错误(type = Bad Request,status = 400)。   无法将[java.lang.String]类型的值转换为必需的类型[cgi.security.domain.Lang];嵌套异常是org.springframework.core.convert.ConversionFailedException:无法将类型[java.lang.String]转换为类型[java.lang.Integer]以获取值&#39; JSP&#39 ;;嵌套异常是java.lang.NumberFormatException:对于输入字符串:&#34; JSP&#34;

由于

1 个答案:

答案 0 :(得分:0)

好吧,您正在尝试将文本字段(String)绑定到Object(Lang)。 Java无法知道您要做什么。但您也可以将该文本字段分配给lang对象的sub属性。

试试这个:

查看:

<input type="text" class="form-control" th:field="*{language.lang}"/>

控制器:

@RequestMapping(value = "/lang/save")
public String saveLang(@ModelAttribute("language") Lang lang){
    langService.saveLang(lang);
    return "redirect:/lang/"+lang.getId();
}