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

在 Java Spring 窗体中发布多行

汤枫
2023-03-14

我将数据库中的多行(每一行代表我们的参数)填充到我的表单中。form类有一个我们的参数列表。我能够填充如下表格:填充的表格

然而,当提交时,我得到一个空指针异常:由于某种原因,modelAttribute没有返回到控制器post方法(即save)

位于un.ac.ucl.isd.our.web.controller.SettingsFormController.save(SettingsFormControler.java:71)处的java.lang.NullPointerException位于sun.rereflect.NativeMethodAccessorImpl.invoke0(本机方法)位于sun.reReflect.NativeMethod AccessorImpl.invoke(未知源)位于sun/rereflect.DelegatingMethodAccessorImpl.invokeorg.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:421),位于org.springfframework.web.bind.ann批注.support.HandlerMethod Invoker.invokeHandlerMethod(HandlerSethodInvoker.java:136),位于:org.springframework.web.servlet.DispatcherServlet.doDispatcher(DispatcherServlets.java:875)位于org.springfframework.web.servlet.DisptcherServlet.doService(Dispatcher servlet.java:807)位于org.springframework.web.servlet.FrameworkServlet.prrocessRequest(FrameworkServlet.java:571),位于org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511),位于java.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206),位于org.apache.cacatalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233),位于org.apache.catalina/core.Standard ContextValve.involke(StandardContextValve.java:191)(ErrorReportValve.java:103)位于org.apache.catalina.core.StandardEnginealve.invoke(StandardEnginealve.java:109),位于org.apache.cotalina.connecter.CoyoteAdapter.service(CoyoteAdapter.java:293),位于org/apache.coyote.http11.Http11Processor.processe(Http11Processor.java:861),位于org apache.coyoote.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)位于java.lang.Thread.run(未知源)知道为什么吗?

我使用的是springframework v2.5.6……我尝试过实现(如何使用javaspringframe将web表单中的多行插入到数据库中),但它对我来说不起作用。

表单类:

package uk.ac.ucl.isd.our.web.controller.command;

import java.util.List;
import uk.ac.ucl.isd.our.access.domain.OurParameter;

public class SettingsForm {

    private List<OurParameter> params;

    public List<OurParameter> getParams() {
        return params;
    }

    public void setParams(List<OurParameter> params) {
        this.params = params;
    }

}

OurParameter类:

package uk.ac.ucl.isd.our.access.domain;

import uk.ac.ucl.upi.AppParameter;

public class OurParameter {
    private String app;
    private String description;
    private String enabled;
    private String grp;
    private String name;
    private String value;

    private String paramValue;
    private String paramType;
    private String paramFormat;

    public String getApp() {
        return app;
    }
    public void setApp(String app) {
        this.app = app;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getEnabled() {
        return enabled;
    }
    public void setEnabled(String enabled) {
        this.enabled = enabled;
    }
    public String getGrp() {
        return grp;
    }
    public void setGrp(String grp) {
        this.grp = grp;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public String getParamValue() {
        return paramValue;
    }


    public void setParamValue(String paramValue) {
        try {
            this.paramValue = AppParameter.getValue(getValue());
        } catch (Exception e) {}
    }
    public String getParamType() {
        return paramType;
    }
    public void setParamType(String paramType) {
        try {
            this.paramType = AppParameter.getType(getValue());
        } catch (Exception e) {}
    }
    public String getParamFormat() {
        return paramFormat;
    }
    public void setParamFormat(String paramFormat) {
        try {
            this.paramFormat = AppParameter.getFormat(getValue());
        } catch (Exception e) {}
    }

}

控制器:

package uk.ac.ucl.isd.our.web.controller;



import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import uk.ac.ucl.isd.our.access.domain.OurParameter;
import uk.ac.ucl.isd.our.service.UPIService;
import uk.ac.ucl.isd.our.web.controller.command.SettingsForm;

/**
 * 
 * 
 * @author Mo
 * 
 * 
 */

@Controller
public class SettingsFormController {


    final static Logger logger = Logger.getLogger(SettingsFormController.class);

    private UPIService upiService;



    @Autowired
    public void setUpiService(UPIService upiService)
    {
        this.upiService = upiService;
    }

    public SettingsFormController()
    {

    }

    @RequestMapping(value = "/settings.do", method = RequestMethod.GET) 
    public ModelAndView get() {
            SettingsForm settingsForm = new SettingsForm();
                List<OurParameter> ourparams = upiService.getAppParamsInfo("OUR");
                settingsForm.setParams(ourparams);
                return new ModelAndView("settingsForm","settingsForm", settingsForm);
    }

    @RequestMapping(value = "/settings.do", method = RequestMethod.POST)
    public ModelAndView save(@ModelAttribute("settingsForm") SettingsForm settingsForm) {
        for (OurParameter oPP: settingsForm.getParams()){
            logger.info("Momo Says the posted thingy is: "+oPP.getValue());
            logger.info("Momo Says the posted thingy is: "+oPP.getName());
        }
            //return null;
        return new ModelAndView("settingsForm");
    }

}

最后是 JSP:

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>Spring 3 MVC Multipe Row Submit - viralpatel.net</title>
</head>
<body>

<h2>Spring MVC Multiple Row Form Submit example</h2>
<form:form method="post" modelAttribute="settingsForm">
    <table>
    <tr>
        <th>No.</th>
        <th>Name</th>
    </tr>
    <c:forEach items="${settingsForm.params}" var="setting" varStatus="pStatus">
        <tr>
            <td align="center">${status.count}</td>
            <td>
            <input name="settingsForm.params[${status.index}].app" value="${setting.app}"/>
            <input name="settingsForm.params[${status.index}].description" value="${setting.description}"/>
            <input name="settingsForm.params[${status.index}].enabled" value="${setting.enabled}"/>
            <input name="settingsForm.params[${status.index}].grp" value="${setting.grp}"/>
            <input name="settingsForm.params[${status.index}].value" value="${setting.value}"/>
            <input name="settingsForm.params[${status.index}].paramValue" value="${setting.paramValue}"/>
            <input name="settingsForm.params[${status.index}].paramType" value="${setting.paramType}"/>
            <input name="settingsForm.params[${status.index}].paramFormat" value="${setting.paramFormat}"/>
        </tr>
    </c:forEach>
</table>    
<br/>
<input type="submit" value="Save" />

</form:form>
</body>
</html>

共有1个答案

何升
2023-03-14

在你引用的例子中,你不会用:

<代码>

你不先试试这个吗?

 类似资料:
  • 我有一个窗口窗体,包含两个列表视图(例如,命名为a和b)和一个按钮。当两个列表视图之间有焦点时,按钮的功能应该是以不同的方式显示消息框。 所以按钮的代码是 然而,当我在“b”列表视图中选择该项时。它总是返回MessageBox。节目(b)。当我重新开始并在“a”列表视图中选择一个项目时,它会给我一个空引用异常。 代码有什么问题吗?

  • 问题内容: 我想向 外部网址 提交结帐 表单,该表单应打开带有结果的新窗口 ,但是我无法使我的应用程序打开它,也无法在单独的窗口中打开它,也无法使用应用程序内浏览器。 到目前为止,我要做的是创建一个内部形式的指令,并通过链接器函数在某个时候调用Submit元素。 当我在浏览器中运行时,这会打开一个新窗口(就像我想要的一样)。 这个问题 时,会出现 在设备上运行 ,因为它只是 REPLACES 的

  • 我正在使用截击库。我有以下API urlhttp://example.com/project/contriller/并且需要将json请求作为body发布到它。 如何使用截击发送?

  • 这是我创建包含内容的新页面的简单表单 最后这是我的页面控制器 我使用了一个命名空间管理员。所以问题是,当我发送表单时,我收到了这个错误,我不明白为什么会有不匹配: DSFDSF 我先谢谢你的帮助

  • 我尝试对一个包含restclient的服务进行一个简单的测试。看来我没有成功地模仿。看起来代码得到的是真实数据,而不是模拟数据。任何人都可以帮我。 服务本身将如下所示:

  • 现在反应堆的建造顺序是 另外module2依赖于module1和module3依赖于module2,现在为了解释依赖关系,我使用${project.version}指定module2 pom中的module1版本,类似地,我使用module3 pom中的${project.version}引用module2。现在快照作业成功执行,但是当我尝试使用聚合器pom(它是所有模块的父pom)释放所有模块时

  • 首先感谢您的关注。我正试图在一个视图中处理多个表单,但a对此并不幸运。 view.php 结果如下: 和控制台输出(无错误) 我想我已经选择了正确的方式来渲染我所有的模型对象的形式?哈?

  • 大多数成熟的项目都平行的维护多个发布线。例如,1.0.0发布后,该发布线会继续微小发布1.0.1,1.0.2等等,直到项目明确的决定终止这条线。请注意,仅仅因为发布了1.1.0不足以终止1.0.x线。例如,一些用户会制定某类政策,永远不升级到较新的次要或主要版本的第一个发布—他们希望其他人能将bug试验出来,例如1.1.0,那么就等待1.1.1。这不一定是自私(请牢记,他们也放弃了bug修正和新特