如何更改视图上的数据?
例如,我有一个页面呈现输入,在其中输入单词,提交(通过按钮或链接)后,我只是在同一页面上获得了该单词的翻译。
在我的代码中,我有服务方法translate(),该方法在数据库中监视单词并获取translatedWord。我该如何翻译该翻译的单词?

 @GetMapping("/translate")
    public String showTranslateForm() {
        return "word-translate";
    }

    @PostMapping("/translate")
    public String translateWord(@ModelAttribute("word") String wordToTranslate, Model model) {
        String translatedWord = wordService.translate(wordToTranslate);

        model.addAttribute("toTranslate", wordToTranslate);
        model.addAttribute("translated", translatedWord);
        return "redirect:/translate";
    }


我需要@ModelAttribute(“ word”)吗?因为我用model.addAttribute东西?我不明白args中的属性与方法主体之间的良好区别

最佳答案

您的后端可能看起来像这样(下面的说明):

    @GetMapping("/translate")
    public String showTranslateForm(Model model) {
        if (model.getAttribute("toTranslate") != null) {
            model.addAttribute("wordToTranslate");
        }
        if (model.getAttribute("translated") != null) {
            model.addAttribute("translated");
        }
        return "word-translate";
    }

    @PostMapping("/translate")
    public String translateWord(@RequestParam("word") String wordToTranslate,
                                RedirectAttributes attrs) {
        String translatedWord = wordToTranslate.translate(wordToTranslate);

        attrs.addFlashAttribute("toTranslate", wordToTranslate);
        attrs.addFlashAttribute("translated", translatedWord);
        return "redirect:/translate";
    }


在您的前端(使用Freemarker),您可以执行以下操作:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <form action="/translate" method="post">
        <input name="word" type="text" />
        <input type="submit" value="submit">
    </form>
    <p>
        <#if translated??>
            ${translated}
        </#if>
        <#if toTranslate??>
            ${toTranslate}
        </#if>
    </p>
</body>
</html>


通过在前端的输入中键入内容并单击提交按钮,您将发送一个值(在控制器方法中期望的word)。

提交将触发@PostMapping("/translate")下的方法。该方法将从输入字段中获取值(由于输入属性name=word会被绑定到此函数中的wordToTranslate参数,因为它前面有@RequestParam(“ word”)批注)。我们还将RedirectAttributes注入到此函数中,以便我们可以添加Flash属性,该属性将传递给showTranslateForm方法。

当属性传递到showTranslateForm时,model现在将包含toTranslatetranslated键(我们在translateWord方法中将它们添加为flash属性),并且现在可以在Freemarker模板中使用它们。 。顺便说一句,<#if translated??><#if toTranslate??> if语句只是检查那些属性是否存在(因为当我们第一次进入此页面时它们最初并不存在,因此在重定向之后就存在)。

希望这些信息能帮助您走上正确的道路!

08-16 07:44