我试图创建一个简单的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;
由于
答案 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();
}