2016-02-02 38 views
0

我正在嘗試創建一個簡單的SpringMVC/thymeleaf項目。我已經完成了我的存儲庫,域和控制器,只剩下前端。問題是,我似乎無法創建一個新的對象,春天不斷彈出一個無法綁定請求元素異常對我。 到目前爲止,我的代碼是這樣的(這是一個子集) 我的郎域類無法綁定百里香形式的請求元素

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

我已經完成了我的倉庫測試(我可以保存並獲取),並且我可以在彈簧啓動時用加載程序在h2實例中注入數據。問題只在表單提交。我是新來的春天,在這裏完全失敗。

錯誤寄回是

週二年2月2 15點39分42秒EST 2016 有意外的錯誤(類型=錯誤的請求,狀態= 400)。 無法將[java.lang.String]類型的值轉換爲所需的類型[cgi.security.domain.Lang];嵌套異常是org.springframework.core.convert.ConversionFailedException:無法從類型[java.lang.String]轉換爲類型[java.lang.Integer]爲值'JSP';嵌套的例外是java.lang.NumberFormatException:對於輸入字符串:「JSP」

感謝

回答

0

好吧,你想一個文本字段(字符串)綁定到一個對象(郎)。 Java沒有辦法知道你在做什麼。但是,您也可以將該文本字段分配給lang對象的子屬性。

試試這個:

查看:

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