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

如何用spring mvc配合百里香叶迭代一个列表?

通鸿风
2023-03-14

我的目标是遍历一个对象列表,一些要显示在屏幕上,另一些要作为对象传递到一个表单中,我可以定义该表单的某些方面,然后将要修改的对象和属性返回给控制器。

以下方法的问题是列表中的对象没有正确传递给表单,因此会出现错误,因为它试图对不存在的对象进行更改。

另一方面,如果我试图通过ModelAndView将它作为一个对象传递,它显然可以工作,但不具备我通过list传递的对象的所有特征。

控制器

@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”存在,但转换为空]

共有1个答案

公良弘毅
2023-03-14

尝试删除type=“hidden”以查看此输入中的内容,因为我知道您是通过执行value=“${comic}”来插入对象,这样输入就不会发送所需的值。。

更改此内容:

为此:

所以你可以看到表单发送给控制器的是什么,我相信这是对象的内存路径,而不是其中存在的数据。

输入中,您必须通知对象的属性,而不是整个对象。

 类似资料:
  • 大家好,我对thymeleaf和我的静态html页面有一个问题。更具体地说,我有一个spring mvc web应用程序,我也在使用spring security,在我的登录页面中,我想使用thymeleaf,这样spring security可以与另一端的客户端层通信吗?我不想在我的所有html页面中包括thymeleaf,因为我将使用AngularJs 我尝试将登录名放在templates文件

  • 我不明白,如果html模板与我在ModelAndView中获得的属性链接,如何将RESTFull服务的@Controller更改为@RestController 在胸腺叶模板中 但我想进入索引页面,在后台获取用户名 我可以使用ajax来更新标记“p”,但这样使用thymeleaf并没有什么好处,我可以使用jsp。那么,在Rest时使用thymeleaf的最佳方式是什么?它是否合理?

  • 我用百里香模板发送电子邮件。我有一个模板,比如: 如果为空或,我不想发送电子邮件。我可以设置任何Thymeleaf属性来生成错误并且不会发送邮件吗?因为在没有值的电子邮件中发送“My name is”没有任何意义。 我从Thymeleaf上下文中获取所有值,变量可能是不同类型的,例如、等。我也尝试了以下方法,但它并没有解决我的问题,因为对象总是可用的:

  • 我是Springboot的初学者,所以决定在购物车上工作。似乎找不到org.springframework.expression.spel.SpelEvalue ationException: EL1007E的根:在null上找不到属性或字段'name'。嵌套异常是org.thymeleaf.exceptions.TemplateProcessingException: Exception评估Sp

  • 我有一个,它传递给了一个Thymeleaf页面。我把这张地图放在页面上,我可以访问它。 如何使用thymeleaf执行?我只需要获取基于某个键的值,然后解析并打印该值,我知道该值并具有逻辑。 我正在运行一个Broadleaf应用程序,而Thymeleaf是它的UI引擎。

  • 每次访问无效的endpoint或在spring Boot应用程序中的de code内部发生一些托管错误时,我都会在浏览器中收到此错误消息: 这意味着我的Spring Boot正在覆盖它的白色标签错误信息,并尝试用百里香错误模板页面向我显示错误。 我在网上找到了许多关于如何使用这个方案的教程,但没有找到任何向我展示如何不使用Thymeleaf来管理我的错误响应的教程。 我想在我的REST服务器中使用

  • 您好,我是spring新手,我正试图用thymeleaf显示一个简单的html文件,但在呈现视图时遇到了问题。它只显示字符串“index”,而不显示index中的html内容。html。有人能告诉我我做错了什么吗 调度员servle。xml文件: TestController.java: 指数html文件:在webapp/templates/index中定义。html

  • 问题内容: 我的问题如下: 我有2个不同的对象,必须从一个表单中填写。 对于1个对象,我只需在newFoo.html中执行: 并在FooController中: 假设我有另一个对象栏,其中带有“状态”变量。我该如何传递该对象,以便可以在同一表格中提交输入? 喜欢: 到目前为止,我试图对其中带有th:object的字段进行设置,这是行不通的,我试图将两个th:object放入形式,这也不起作用。 我