当前位置: 首页 > 知识库问答 >
问题:

在Thymeleaf中访问列表中每个对象的属性

阴焱
2023-03-14

我目前正在用Spring Boot和Thymeleaf做一个项目,以了解两者的基本知识。现在我被一个问题卡住了,这个问题看起来很容易,但我无法掌握它的窍门。我只是有一个名为“电影”的现有对象,我想编辑它并将覆盖的版本保存到数据库中。现在我所要做的就是用电影的数据填充一个表单。这很好,但问题是,因为一部电影可以有多个演员,所以我在每个电影对象中保存了一个演员的数组列表,其中有一个名为name的属性。

电影-

现在,如果我将电影对象绑定到胸腺,它当然只是用com.example.demo.Author@1f8e64e1、com.example.demo.Author@76a4e023之类的东西填充表单。

如果我能说这样的话,那就太完美了。名字,来取名字。

<div class="input-field">
    <textarea id="plot" class="materialize-textarea" th:field="*{plot}" ></textarea>
    <label for="plot">Plot</label>
</div>
<div class="input-field">
    <input type="text" id="actors" th:field="*{actors}" >
    <label for="actors">Hauptbesetzung</label>
</div>

情节进展顺利。

现在,如果我天真地尝试使用点符号,将引发以下异常:

bean类的无效属性“authors.name”[com.example.demo.电影]: Bean属性“authors.name”不可读或有无效的getter方法:getter的返回类型是否与setter的参数类型匹配?

能手和二传手都是正确的。

我只是想知道,thymeleaf如何确切地知道演员列表中有多少个值,所以我想一定有一个简单的方法来访问每个元素的名称。我也用th: each尝试过,但是完整的表单字段甚至没有创建。

<div th:each="actor : ${actors}" class="input-field">
    <input type="text" id="actors" th:field="*{actor.name}" >
    <label for="actors">Hauptbesetzung</label>
</div>

这是我的控制器:

    @GetMapping("/editmovie/{movieId}")
public String editMovie(@PathVariable Long movieId, Model model) {
    System.out.println("tessssssssss");
    System.out.println(movieId);
    Optional<Movie> movie = movieRepository.findById(movieId);
    if(movie.isPresent()){
        Movie actualMovie = movie.get();
        model.addAttribute("movie",actualMovie);
    }

    return "editmovie";
}

如果你需要更多信息,请告诉我。

太谢谢你了。

共有1个答案

诸葛嘉熙
2023-03-14

问题的根源在于不能对临时变量使用th:field表达式(例如由th:each定义的表达式——在您的例子中是th:each=“actor:${actors}”)。如果你想编辑这些,你必须用一种特殊的方式:

<div th:each="actor, i : ${actors}" class="input-field">
    <input type="text" id="actors" th:field="*{actors[__${i.index}__].name}" >
    <label for="actors">Hauptbesetzung</label>
</div>

(有关这方面的更多信息,请参阅关于动态场的Thymeleaf教程。)

 类似资料:
  • 我正在尝试为我的列表模式中的每个对象创建一个包含该对象数据的表单。 所以我的控制器中有: 在我的ThymeLeaf模板中: 控制器: ThymeLeaf模板: 这种情况不会引发任何异常,但为空

  • 我的代码不能工作,我在第二个循环附近得到了java.lang.NumberFormatException:输入字符串:“FromNodeSend”: 我的代码出了什么问题?

  • 为所有的代码道歉。我尽量少发帖。

  • 问题内容: 当存在时,是否有可能获得全部列表?是否为此准备了电话,还是我必须编写一个foreach循环,如: 问题答案: Java 8及更高版本: 如果需要确保得到结果,则必须将最后一行更改为: Java 7及以下版本: Java 8之前的标准集合API不支持这种转换。您必须编写一个循环(或将其包装在您自己的“地图”函数中),除非您使用一些更高级的集合API /扩展。 (您的Java代码段中的行正

  • 问题内容: 我有一系列对象,并且正在使用对其进行迭代,这很容易。该数组如下所示: 我的属性如下所示: 在每个迭代中,等于预期的对象之一。无论如何都可以访问键和对象的值?这样我就可以做这样的事情: 其中== 和== 。我已经尝试做这件事,但总是最终只是step对象的索引(这很有意义)。我只是想弄清楚是否还有另一种语法编写方式,以便我可以获取键和值。 感谢您的任何想法/建议。非常感激。 PS。我目前的

  • 问题内容: 是否有一种优雅的方式来访问对象的第一个属性… 您不知道物业名称的地方 而不使用像jQuery这样的循环 例如,我需要在不知道foo1名称的情况下访问对象: 问题答案: var obj = { first: ‘someVal’ }; obj[Object.keys(obj)[0]]; //returns ‘someVal’ 使用此方法,您还可以通过索引访问其他属性。请注意!根据ECMAS