修改列为ModelAttributeSessionAttribute时,为什么不保留其新值?

每次我对以下示例进行请求时,它都会打印出“初始值。”,这是第一个请求的正确值。但是在第一个请求之后,其值应为“新值”。

为什么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不变性。我制作了一个图表来帮助您了解问题所在,但是您可能需要研究更多有关该问题的信息。

java - Spring MVC更新ModelAttribute值-LMLPHP

  • 调用sysout时,正在打印“_test_string”(方法参数)指向的值,该值与ModelAttribute“test_string”相同。
  • 当您为“_test_string”(方法参数)分配“新值”时,请注意您没有更改“test_string”(ModelAttribute)的值
  • 我认为您必须这样做才能覆盖存储在模型中的值。
  • 10-07 20:37