首页 文章

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

提问于
浏览
0

我正在尝试创建一个简单的SpringMVC / thymeleaf项目 . 我已经完成了我的存储库,域和控制器,只保留了前端 . 问题是,我似乎无法创建一个新对象,Spring继续弹出一个Failed绑定请求元素异常对我 . 到目前为止,我的代码是这样的(这是一个子集)我的Lang域类

@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>

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

它返回的错误是

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

谢谢

1 回答

  • 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();
    }
    

相关问题