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

在出现错误时保留模型值并显示相同的百里香叶模板

毕宏盛
2023-03-14

根据我的理解,模型属性与每个请求相关联,它们不能在多个请求中存活,直到我们将它们添加为flashAttributes。

我有一个简单的控制器方法,它显示了几个选项供用户选择。但是,这些选项正在使用模型属性附加到thymeleaf模板。

<div class="input-group mb-3" th:each="ingredient : ${recipes.ingredients}">
<div class="input-group-prepend">
    <div class="input-group-text">
        <input aria-label="Checkbox for following text input" name="ingredient"
                th:value="${ingredient.name}" type="checkbox">
    </div>
    <input aria-label="Text input with checkbox" class="form-control" disabled
            th:value="${ingredient.name + '     ' + ingredient.price + 'Rs.'}"
            type="text">
</div>

假设“recipes”作为模型属性,它被注入到控制器内的modelMap中。

bean验证失败时,下面的行执行。

if (errors.hasErrors()) return "selectItem";

selectItem模板被重新渲染,但我在前一个控制器中设置的任何模型属性都会消失。

我在同一个控制器中使用@ModelAttribute方法解决了这个问题,为特定控制器的每个HTTP请求设置模型属性(直到它不在controllerAdvice中以获得全局效果)。

如果我走对了路,我会感到困惑。||有什么优雅的方法可以实现这一点。

为每个请求设置模型属性是一种开销,当我希望它们可用于少数请求映射时。

共有1个答案

黄宏毅
2023-03-14

当你说:

selectItem 模板被重新渲染,但我在以前的控制器中设置的任何模型属性都消失了。

您的意思是,当页面由于验证错误而重新加载时,您的模型属性不再存在,并且百里香叶可能会返回一个错误,因为它无法找到它们,对吗?

如果是这种情况,则必须在 if 语句中手动准备相同的模型属性(即将它们添加到 MapModel 中):

if (errors.hasErrors()) {
 map.addAttribute("recipes", recipes);
 return "selectItem";
}

或者,如果在控制器中的其他页面上也需要此模型属性,则可以通过使用 ModelAttribute 注释声明方法来减少代码重复,这会将此属性添加到控制器中的所有模型中:

@ModelAttribute("recipes")
public Recipes loadRecipes() {
    // get list of Recipes
    return list;
}
 类似资料:
  • 我不知道我的视图出了什么问题,但它不可能工作,即使设置正确,视图也总是出错。我不知道是否还有其他方法可以做到这一点,但胸腔总是失败。 错误是这样的- 这是我的控制器 我的观点

  • 我尝试使用ThymeLeaf处理模板,但我得到。 这是我的代码: 我试图通过添加这样的前缀来更改路径,但它没有帮助: 此错误可能是由路径问题以外的其他原因引起的吗? 如果需要,我可以给我的项目结构的更多细节。 谢谢 编辑: 这是堆栈跟踪,它可能会有所帮助:

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

  • 我在Intellij Idea中使用Spring boot和thymeleaf,并尝试在模板中获取URL的参数,我使用以下代码: 它工作正常,但我想清除错误消息,有什么好方法可以做到这一点吗?

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

  • 我正在创建一个简单的HTML表单以及Thymelaf,我在我的Spring Boot应用程序中使用它。 在表单中,我指定了以下语句: 但是,表单中显示的值不是评级,而是0。 删除0后,占位符最终会出现。 编辑< br >显然,百里香叶似乎导致了这里的问题。