繁体   English   中英

Spring MVC更新ModelAttribute值

[英]Spring MVC update ModelAttribute value

在修改ModelAttribute被列为SessionAttribute ,为什么doesent它保持它的新价值?

每次我向下面的例子发出请求时,它都会打印出“初始值。”,这是第一个请求的正确值。 但是在第一次请求之后,它的值应该是“新值”。

为什么不存在ModelAttribute存储它的值?

我有一个基类。 所有servlet都扩展了这个:

@SessionAttributes(value = {"test_string", "something"})
public abstract class Base<T>
    {
    public abstract T request(
            @ModelAttribute("test_string") String _test_string,
            ModelAndView _mv);

    @ModelAttribute("test_string")
    private String getTest()
    {
        return "Initial value.";
    }
}

我有一个特定的servlet:

@Controller
public class InterfaceController extends Base<String>
{
    @PostMapping(value = "/interface")
    @ResponseBody
    @Override
    public String request(
        @ModelAttribute("test_string") String _test_string,
        ModelAndView _mv)
    {
        System.out.println(_test_string);
        _test_string = "new value";

        return "whatever content";
    }
}

我不是Spring MVC专家,但你的问题似乎是理解Java传递引用和String inmutability。 我已经制作了一个图表来帮助您了解问题所在,但您可能需要研究更多相关信息。

图

  1. 当您调用sysout时,您将打印“_test_string”(方法参数)指向的值,此时与ModelAttribute“test_string”相同。

  2. 将“new value”分配给“_test_string”(方法参数)时,请注意您没有更改“test_string”(ModelAttribute)的值

  3. 这是我认为你必须要覆盖模型中存储的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM