java - 无法在 spring 中填充 modelAttribute

标签 java spring spring-mvc controller modelattribute

我无法获取第二个请求的 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/

相关文章:

java - 列表与 map : Which takes less space and more efficient?

java - 使用大量 AOP 请求作用域 bean 时的性能问题

java - Spring DatastoreRepository beans无法在运行时解析,但Intellij在构建时没有显示错误

java - 为什么 DispatcherServlet 不调用我的 HandlerInterceptor?

mysql - 使用主数据库在 Spring MVC 应用程序中实现 Multi-Tenancy ?

java - 将 Perl 正则表达式转换为 POSIX 正则表达式

java - 如何使用名为 cage 的静态方法创建一个 java 类,将 X 置于 jail 条形中?

java - Keycloak无法获取访问 token

java - 带有命名参数的 hibernate 查询没有给出结果

javascript - Spring MVC 外部 JS 不工作