gpt4 book ai didi

java - 无法在 spring 中填充 modelAttribute

转载 作者:行者123 更新时间:2023-12-01 13:38:19 32 4
gpt4 key购买 nike

我无法获取第二个请求的 ModelAttribute。我的第一个请求是 initForm() 方法,我准备了 Command 对象并能够在 jsp 中显示命令。

通过 initForm(),我正在填充命令,并且当我进行 ajax 调用时,我想要在 editForm 中填充该命令。

这是我的 Spring 表格

<form:form method="POST" action="addstudentdetails.htm" commandName="command">
Ignore what is inside this

Name: Shoaib Age:23 <a href="#" onclick="editstudentdetails(1,0)">edit</a>

</form:form>

我的ajax请求:

function editStudentDetails(studentId,index){
$.ajax(
{url:"editstudentdetails.htm",
method:"GET",
data:{"action":"edit","id":studentId,"index":index},
success: function(data) {
jQuery("#studentDetailsDiv").html(data)
}

}

)
}

editStudentDetails() 方法中,我有方法 ajax 调用来转到 Controller 的 editForm()

这是我的 Controller :

@Controller

public class StudentDetailsController {

@Autowired
private StudentDetailsDAO studentDetailsDAO;

@RequestMapping(value="/studentdetails.htm",method = RequestMethod.GET)
public String initForm(HttpServletRequest request,ModelMap map){
String action=request.getParameter("action");
StudentDetailsCommand command=new StudentDetailsCommand();
System.out.println("in controller"+action);
command.setStudents(studentDetailsDAO.findAll());
map.addAttribute("command", command);

return "studentdetails";
}

@RequestMapping(value="/editstudentdetails.htm",method = RequestMethod.GET)
public String editForm(ModelMap map,HttpServletRequest request){
map.addObject("index", request.getParameter("index"));
StudentDetailsCommand command=(StudentDetailsCommand)map.get("command");
System.out.println(command);
System.out.println(command.getStudents());//NullPointerException here.
map.addObject("command", command);
return "studentdetails";
}
}

甚至尝试过 @ModelAttribute("studentDetailsCommand") 但没有成功。

我是 Spring 3.0 的新手,我遵循了此处提供的所有解决方案,但没有任何效果。有人可以帮助我吗?

最佳答案

模型属性仅存在于一个 HttpServletRequest 的生命周期中。考虑阅读my answer here

initForm 方法中,执行以下操作

map.addAttribute("command", command);

这会将名为 command 的属性添加到模型属性中。该属性最终将进入 HttpServletRequest 属性并可供您的 JSP 使用。在这里

<form:form [...] modelAttribute="studentDetailsCommand" commandName="command">

首先,modelAttributecommandName 具有相同的用途,即。在模型中查找属性。如果删除 commandName,您将收到异常,因为没有名为 studentDetailsCommand 的模型属性。这里您的 commandName 的值将覆盖您的 modelAttribute 的值。

当 Servlet 容器完成呈现 JSP 时,呈现的内容将作为 HTTP 响应的正文发送。此时,请求已被处理,HttpServletRequest 和模型属性已被垃圾收集。

当您通过 AJAX 发送新请求时,不再有任何名为 studentDetailsCommand 的模型属性(实际上从来没有)。

考虑使用Flash Attributes

相关:

关于java - 无法在 spring 中填充 modelAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21066538/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com