排憂解難之Mark一個關(guān)于Thymeleaf 使用th:field屬性與對象屬性綁定的小問題

版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/Frank_Adam/article/details/79438563
Mark一個關(guān)于Thymeleaf 使用th:field屬性與對象屬性綁定的小問題

最近在嘗試用Spring Boot + Thymeleaf搭建一個個人博客,其中Article類中有一個屬性如下定義:

private List<String> contentParagraphs;

需求是將前端頁面的textarea文本域與contentParagraphs屬性綁定,而前端頁面的textarea大部分是經(jīng)由javascript代碼生成的:

var $textArea = $("<textarea></textarea>");
$textArea.attr("some attr","some value");
...
$inputField.append($textArea);

像這樣,使用JS代碼往網(wǎng)頁中動態(tài)添加一個輸入域。頁面中默認具有一個輸入域(綁定一個段落),點擊按鈕可以增加一個輸入域。

默認情況:

點擊加號按鈕:

比較關(guān)鍵的,默認輸入域域中用于和段落進行綁定的前端代碼如下,主要是th:field屬性起到綁定作用,這樣使這個textarea綁定到contentParagraphs[0],即第一個段落。

  <textarea th:field="${article.contentParagraphs[0]}"      id="contentParagraph0" required="required" class="materialize-textarea"></textarea>

那么如何將增加的輸入域和下一個段落進行綁定呢?很自然地會沿用默認域的寫法,但是把中括號里的0改成其他數(shù)字就行了。所以一開始我的JS代碼是這樣的:

    $textArea.attr("th:field","${article.contentParagraphs["+currentLocation+"]}");

但是這樣點擊提交按鈕后,后臺只接收到了默認輸入域的文本。很揪心。

不過通過Chrome瀏覽器的檢查元素功能,查看默認輸入域的HTML代碼如下:

<textarea id="contentParagraph0" required="required" class="materialize-textarea" name="contentParagraphs[0]"></textarea>

是不是很驚訝!壓根沒有th:field屬性,而變成了name=contentParagraphs[0]屬性。再查看增加的輸入域HTML代碼如下:

<textarea id="contentParagraph1" required="required" class="materialize-textarea" th:field="${article.contentParagraphs[1]}"></textarea>

終于發(fā)現(xiàn)問題所在了吧!推測這是因為Thymeleaf在瀏覽器解析頁面的時候把th:field屬性自動轉(zhuǎn)換成name屬性了。所以把JS中綁定段落的代碼改成設置name屬性就OK了。

  $textArea.attr("name","contentParagraphs["+currentLocation+"]");

點擊提交按鈕,后臺成功接收到增加的輸入域文本(后臺代碼打印contentParagraphs屬性)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容