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