如何在hbs(handlebars)文件中访问redirectAttributes.addFalshAttributed值

时间:2018-06-11 05:24:23

标签: spring spring-boot

@PostMapping("/upload") // //new annotation since 4.3
public String singleFileUpload(@RequestParam("file") MultipartFile file,
                               RedirectAttributes redirectAttributes) {
    if (file.isEmpty()) {
        redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
        return "redirect:uploadStatus";
    }
    try {
        // Get the file and save it somewhere
        byte[] bytes = file.getBytes();
        Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
        Files.write(path, bytes);

        redirectAttributes.addFlashAttribute("message",
                "You successfully uploaded '" + file.getOriginalFilename() + "'");

    } catch (IOException e) {
        e.printStackTrace();
    }

    return "redirect:/uploadStatus";
}

如何访问上述代码的消息值。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>

<h1>Spring Boot - Upload Status</h1>


<h2>{{message}}</h2>

</body>
</html>

上述代码无法访问消息值。如何在手柄文件中访问。 我想显示消息变量字符串。

3 个答案:

答案 0 :(得分:0)

对flash属性没有任何特殊处理。它与具有重定向的模型属性相同。

更改此

<h2>{{message}}</h2> 

<h2>${message}</h2> 

答案 1 :(得分:0)

您缺少$或#符号取决于您希望如何解析表达式。使用类似下面的内容:

<h2 th:text="${message}"><h2>

请检查标准表达式语法部分standarddialect5minutes

答案 2 :(得分:0)

您在HTML中的handlebars变量引用实际上是正确的。

如果您的重定向是通过控制器路由的(例如,如果在控制器中定义了updateStatus的GET方法),那么您可能需要遵循我在回答类似问题时所描述的内容here。基本上,在PRG情况下使用RedirectAttributes时,您要做的就是:

  1. RedirectAttributes作为POST方法签名的参数
  2. 在POST方法中通过addFlashAttribute设置所需的属性
  3. 在GET方法签名中包含一个@ModelAttribute注释的参数,该参数引用flash属性

您没有发布您的updateStatus GET方法代码,所以我看不到您在做什么,但是如果您正在尝试直接在模型上设置该属性,这将无意中导致flash属性被覆盖。

如果我不得不猜测,我会说问题是您在GET方法签名中缺少@ModelAttribute注释的参数。