Spring MVC th:字段语法在th:each内部是不相关的

sqougxex  于 2023-02-05  发布在  Spring
关注(0)|答案(1)|浏览(113)

我正在使用Spring Boot和百里香叶组合为我的项目。
下面是Get控制器的代码片段-

@GetMapping("/split")
public String VerticalSplit(Model model) {
    MessageContent messageContent0 = new MessageContent();
    MessageContent messageContent1 = new MessageContent();
    List<MessageContent> messageContentList = new ArrayList<MessageContent>();
    messageContentList.add(0, messageContent0);
    messageContentList.add(1, messageContent1);
    DisplayMessage displayMessage = new DisplayMessage();
    model.addAttribute("displayList", displayService.getAllDisplays());
    model.addAttribute("groupList", groupService.getAllGroups());
    model.addAttribute("messageContentList", messageContentList);
    model.addAttribute("displayMessage", displayMessage);
    return "combo_vertical_split";
}

及相应的html代码如下-

<html>
 <head></head>
 <body>
  <div class="col-12"> 
   <label class="form-label"> Name of Message </label> 
   <input type="text" name="name" class="form-control" placeholder="Enter Name Of Message" required="required" th:value="${displayMessage.name}" /> 
  </div> 
  <hr /> 
  <div th:each="messageContent, iStat : ${messageContentList}"> 
   <h6 align="center" th:text="'Section '+${iStat.count}"></h6> 
   <div class="form-group"> 
    <label class="form-label"> Select the content type </label> 
    <select name="messageContentType" id="messageContent" class="form-control" th:onchange="ShowHideTextMediaDiv();" th:field="${messageContent.type}"> <option class="form-select" th:value="Text">Text</option> <option class="form-select" th:value="Image">Image</option> <option class="form-select" th:value="Video">Video</option> </select> 
    <br /> 
   </div> 
  </div>
 </body>
</html>

当我试图加载该页面时,我得到如下错误-

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'messageContent' available as request attribute

我不明白的一点是,即使我已经在控制器中声明了messageContent,为什么我会得到上面提到的错误。
我尝试了多种语法

th:field="${messageContent.type}"

详情如下─

th:field="*{messageContent.type}" //its silly as i have not declared the form object but still i tried
th:field="${messageContentList[__${iStat.index}__].type}"

和很少其他组合以及,但没有任何工作,几乎每次我得到同样的错误。

ds97pgxw

ds97pgxw1#

出现Neither Bindingnor plain target...错误是因为您在HTML中使用了th:field,但尚未定义绑定到它的对象。
您可以在form元素中添加input元素,并添加绑定到模型的messageContent对象的th:object属性。
您可以执行类似以下操作:

<form th:object="${messageContent}">
  <div class="form-group">
    <label class="form-label"> Select the content type </label>
    <select name="messageContentType" id="messageContent" class="form-control" th:onchange="ShowHideTextMediaDiv();" th:field="*{type}">
      <option class="form-select" th:value="Text">Text</option>
      <option class="form-select" th:value="Image">Image</option>
    </select>
    <br />
  </div>
</form>

相关问题