我的目標是回圈瀏覽物件串列,其中一些顯示在螢屏上,另一些作為物件傳遞到表單中,我可以定義其中的某些方面,然后將要修改的物件和屬性回傳給控制器。
以下方法的問題是串列中的物件未正確傳遞給表單,因此會出錯,因為它試圖對不存在的物件進行更改。
另一方面,如果我嘗試通過 ModelAndView 將它作為物件傳遞,它顯然可以作業,但不具備我通過串列傳遞的物件的所有特征。
控制器
@GetMapping("/")
public ModelAndView home() throws IOException {
ModelAndView mv = new ModelAndView();
mv.setViewName("home");
List<Comics> allComics = cs.getAll();
mv.addObject("comics", allComics);
return mv;
}
@PostMapping("/update")
public ModelAndView update(Comics com, @RequestParam("attr") String attr) throws IOException {
ModelAndView mv = new ModelAndView();
com.setLastRead(attr);
cs.updateAttributes(com);
mv.setViewName("home");
List<Comics> allComics = cs.getAll();
mv.addObject("comics", allComics);
return mv;
}
主頁.html
<html xmlns:th="http://www.thymeleaf.org">
<tr th:each="comic : ${comics}">
<td th:text="${comic.title}"></td>
<td th:text="${comic.lastChapter}"></td>
<td>
<a th:href="${comic.lastChapterLink}" target="_blank"
role="button" class="btn btn-md btn-block btn-info"> Link
</a>
</td>
<td></td>
<td>
<form th:action="@{/update}" th:object="${comic}" method="post">
<input type="text" name="attr" id="attr"/>
<button type="submit">Sub</button>
</form>
</td>
</tr>
PS:我剪掉了html頁面的頭部,因為里面全是不相關的CDN
如何將 Spring MVC 與 Thymeleaf 集成以實作傳遞物件串列可以顯示在螢屏上并在 html 頁面中用于其他目的而不會引發錯誤的結果?
顯然,如果您知道更有效的方法來實作我正在聽的結果;我只使用了這種方法,因為我不知道其他方法。
謝謝
回復@RafaeldaSilva:
我同意,但這并不能解決問題。讓我解釋一下:我要通過表單修改的屬性已經有了它的名字來允許你寫的東西。但是物件迭代了:
tr th:each="comic : ${comics}">
不能直接作為輸入傳遞,因為它是從串列中獲取的值,并且僅單獨存在于 html 頁面中。有人可能會認為將其作為隱藏輸入傳遞,但在這種情況下,結果將是相同的(我已經嘗試過):
<form th:action="@{/update}" th:object="${comic}" method="post">
<input type="hidden" value="${comic}" name="com"/>
<input type="text" name="attr" id="attr"/>
<button type="submit">Sub</button>
</form>
@PostMapping("/update")
public ModelAndView update(@RequestParam("com") Comics com, @RequestParam("attr") String attr) throws IOException {
ModelAndView mv = new ModelAndView();
com.setLastRead(attr);
System.out.println("Comic: " com);
cs.updateAttributes(com);
mv.setViewName("home");
List<Comics> allComics = cs.getAll();
mv.addObject("comics", allComics);
return mv;
}
錯誤: [org.springframework.web.bind.MissingServletRequestParameterException:方法引數型別漫畫的必需請求引數'com'存在但轉換為null]
uj5u.com熱心網友回復:
嘗試洗掉type="hidden"以查看其中存在的內容input,據我所知,您正在通過執行插入物件,這樣value="${comic}"輸入不應發送所需的值..
改變這個:<input type="hidden" value="${comic}" name="com"/>
為了這:<input type="text" value="${comic}" name="com"/>
所以你可以看到表單發送給控制器的內容,我相信這是物件的記憶體路徑,而不是其中存在的資料。
在input你必須告知物件的屬性,而不是完整的物件..
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/485907.html
上一篇:使用Junit但不用于測驗?
