Spring MVC更新ModelAttribute值

时间:2018-01-22 07:48:05

标签: java spring-mvc session modelattribute

修改列为ModelAttribute的{​​{1}}时,为什么要保留其新值?

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

为什么不存在SessionAttribute存储其值?

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

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.";
    }
}

1 个答案:

答案 0 :(得分:3)

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

Diagram

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

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

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