Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC更新模型属性值_Java_Spring Mvc_Session_Modelattribute - Fatal编程技术网

Java Spring MVC更新模型属性值

Java Spring MVC更新模型属性值,java,spring-mvc,session,modelattribute,Java,Spring Mvc,Session,Modelattribute,修改列为会话属性的模型属性时,为什么不保留其新值 每次我向下面的示例发出请求时,它都会打印出“初始值”,这是第一个请求的正确值。但在第一个请求之后,它的值应该是“新值” 为什么不存储它的值 我有一个基础班。扩展此功能的所有servlet: @SessionAttributes(value = {"test_string", "something"}) public abstract class Base<T> { public abstract T request(

修改列为
会话属性的
模型属性
时,为什么不保留其新值

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

为什么不存储它的值

我有一个基础班。扩展此功能的所有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.";
    }
}
@SessionAttributes(值={“test_string”,“something”})
公共抽象类基
{
公开摘要请求(
@ModelAttribute(“测试字符串”)字符串测试字符串,
模型和视图(mv);
@ModelAttribute(“测试字符串”)
私有字符串getTest()
{
返回“初始值”;
}
}
我有一个特定的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";
    }
}
@控制器
公共类InterfaceController扩展了基
{
@后期映射(value=“/interface”)
@应答器
@凌驾
公共字符串请求(
@ModelAttribute(“测试字符串”)字符串测试字符串,
模型和视图(mv)
{
System.out.println(_test_string);
_测试字符串=“新值”;
返回“任意内容”;
}
}

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

  • 调用sysout时,您正在打印由“\u test\u string”(方法参数)指出的值,此时该值与ModelAttribute“test\u string”相同

  • 当您将“新值”指定给“\u test\u string”(方法参数)时,请注意,您没有更改“test\u string”(ModelAttribute)的值

  • 我认为您必须这样做才能覆盖存储在模型中的值


  • 我认为它甚至与String
    immutabilty
    没有任何关系,因为值还没有被重新分配。好吧,这是有意义的。因此,如果我必须返回一个字符串(因为我使用Gson呈现json),那么如何更新模型?如果不可能,那么不那么优雅的方法是返回更新后的ModelAndView,而不是字符串,并将字符串Json传递给视图。怎么用?我尝试使用MappingJackson2JsonView,它将整个模型呈现为Json,这不是一个好主意。这是一个不同的问题。正如我所说,对不起,我不是Spring MVC专家。但我不理解你的新问题。如果需要在控制器和视图之间传递一个简单字符串,可以使用my point(3)语句或其他类似方法。您可以在视图中恢复属性“test_string”。如果您使用Json来表示所有模型,我想您可以使用一些库来提取所需的特定数据。