当前位置: 首页 > 知识库问答 >
问题:

在Spring无法填充模型属性

傅阿苏
2023-03-14

我无法为第二个请求获取ModelAtort。我的第一个请求是initForm()方法,我准备了命令对象并能够在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调用来调用控制器的editForm()。

这是我的控制器:

@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的新手,我遵循了这里给出的所有解决方案,但都无效。有人能帮我吗?

共有1个答案

宗政昱
2023-03-14

模型属性仅在一个HttpServletRequest的生命周期内存在。考虑在这里阅读我的答案。

在initForm方法中,可以执行以下操作

map.addAttribute("command", command);

这将向模型属性添加一个名为“command”的属性。该属性最终将进入HttpServletRequest属性,并可用于JSP。在这里

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

首先,modelAttribute和commandName具有相同的目的,即在模型中查找属性。如果删除commandName,则会出现异常,因为没有名为studentDetailsCommand的模型属性。此处,您的命令名的值将覆盖您的模型属性的值。

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

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

考虑使用Flash属性。

相关:

  • 如何在Spring MVC 3.1中重定向后读取flash属性
  • Spring重定向属性:addAttribute vs addFlashAttribute
  • 在Spring的重定向属性中使用getFlashAttributes()
 类似资料:
  • 我被卡住了。我一直在尝试不同的方法将6个头像字符串的结果加载到picturebox控件数组的加载方法中。 这就是我必须迭代(mysql结果集)值字符串到pictureboxes的内容 但是每个图片框都显示为白色(空白)。如果我将SQL查询设置为LIMIT 1,我将为每个图片框获得相同的第一个头像。但它不会相应地分配,或者根本不会。 我如何才能循环到我的6个图片框正确的网址?谢谢你们 编辑 我也尝试

  • 我们将laravel应用程序用于服务器站点restful应用程序。我们有一个存储数据的MySql数据库。为了访问数据,我们使用了laravel模型。有时我们可能需要创建自定义属性或使用访问器和变异器操作属性。事情是这样的。有时我们需要使用访问器从多个属性计算数据。例如,如果该表包含一个名为“到期日”的字段,并且我们希望定义一个自定义属性来指示到期日是否已过,那么我们将使用如下自定义属性: 我的问题

  • 我有一个Java类,它从JSON文件/数据库/其他东西加载我的应用程序的属性。 我已将配置为Spring上下文中的bean。 现在我想在spring上下文文件中使用中的一个值来表示不支持SpEL的内容,例如spring集成日志通道适配器,例如。 是否有一种方法可以设置可以使用SpEL填充的“属性”?

  • 问题内容: 我想将JPA2 Criteria API与元模型对象一起使用,这似乎很简单: 但是这个Root.get总是抛出一个。是由Hibernate自动生成的,看起来像 但显然从未有人居住。 我是否缺少框架初始化步骤? 编辑: 这是崩溃时我如何使用JPA和元模型的摘要: (是一个类,所以我就在前面)和相关的堆栈跟踪: 编辑2: 在JBoss EntityManager指南中,我可以看到 当构建H

  • 下面是Verzeichnisdaten类: 此代码属于Verzeichnisdaten。上面有更多的代码,但现在不相关了。

  • 问题内容: 我有一个带有created_by字段的模型,该模型链接到标准Django用户模型。保存模型时,我需要使用当前用户的ID自动填充它。我无法在Admin层执行此操作,因为该网站的大部分内容都不会使用内置的Admin。谁能建议我该怎么做? 问题答案: 如果你希望某些东西在管理员和其他地方都可以使用,则应使用自定义模型形式。基本思想是重写该__init__方法以采用一个额外的参数-reques