使用 Spring MVC 进行动态表单和数据绑定

2023-12-21

在我的 Spring MVC 应用程序中,我需要实现一个动态调查表:我有 N 个问题,每个问题有 3 个选项。

所以在我的页面中我会有这样的内容:

|    Question 1   |   1   |   2   |   3   |
|    Question 2   |   1   |   2   |   3   |
|    Question 3   |   1   |   2   |   3   |
|    ...          |   1   |   2   |   3   |
|    Question N   |   1   |   2   |   3   |

问题存储在数据库中,对于选项,我将使用单选按钮。 我会用一个forEach标签来创建动态行,但我不知道如何发布数据和处理ModelAttribute在这种情况下绑定...

对于我的模型属性类来说,哪一个是一个好的结构?是否可以使用 Spring MVC 来绑定动态表单?


在这种情况下如何发布数据并处理 ModelAttribute 绑定

你可以做,

我正在考虑Question类如:

public class Question {
    private String question;
    private Map<Integer,Option> optionMap;
    private Integer selectedOptionKey;
        //getters and setters
}

and Option类如:

public class Option {

    private Integer optionKey;
    private String optionText;

    //getters and setters
}

and one QuestionsModel表单绑定类,例如:

public class QuestionsModel {
    private Map<Integer, Question> questionMap;
    //getters and setters
}

和控制器类内部GET处理程序方法,填充问题,例如:

@RequestMapping(method=RequestMethod.GET)
    public String index(Model model){                
    Option optionA = new Option(1, "A");
    Option optionB = new Option(2, "B");
    Option optionC = new Option(3, "C");

    Map<Integer, Option> optionMap = new HashMap<Integer, Option>();
    optionMap.put(optionA.getOptionKey(),optionA);
    optionMap.put(optionB.getOptionKey(),optionB);
    optionMap.put(optionC.getOptionKey(),optionC);

    Question question1 = new Question("A Q", optionMap, 1);
    Question question2 = new Question("B Q", optionMap, 1);
    Question question3 = new Question("C Q", optionMap, 1);
    Map<Integer, Question> questionMap = new HashMap<Integer, Question>();
    questionMap.put(1, question1);
    questionMap.put(2, question2);
    questionMap.put(3, question3);

    model.addAttribute("questionsModel", new QuestionsModel(questionMap));

    return "index";
}

最后在jsp页面使用<form:hidden..保留旧值,并呈现表单元素,例如:

<c:url value="/questionPost" var="postUrl"/>

<form:form action="${postUrl}" modelAttribute="questionsModel" method="post">
    <table>
    <tr>
        <th>Question</th>
        <th>Options</th>        
    </tr>   
    <c:forEach items="${questionsModel.questionMap}" var="currQue" varStatus="queIndex">
        <tr>
            <td>
                <form:hidden path="questionMap[${queIndex.count}].question"/>
                <label>Question:</label><c:out value="${currQue.value.question}"/><br/>
            </td>
            <td>
            <c:forEach items="${currQue.value.optionMap}" var="opt" varStatus="optionIndex">
                <form:hidden path="questionMap[${queIndex.count}].optionMap[${optionIndex.count}].optionText"/>
                <form:hidden path="questionMap[${queIndex.count}].optionMap[${optionIndex.count}].optionKey"/>

                <form:radiobutton path="questionMap[${queIndex.count}].selectedOptionKey"
                    value="${opt.value.optionKey}" label="${opt.value.optionText}"/>

            </c:forEach>

             </td>
        </tr>
    </c:forEach>
    </table>
    <input type="submit"/>
</form:form>

您可以在 POST 中接收绑定和模型,例如:

@RequestMapping(value="/questionPost", method=RequestMethod.POST)
public String indexPost(@ModelAttribute("questionsModel") QuestionsModel questionModel, BindingResult result){
    System.out.println(questionModel.getQuestionMap());

    return "redirect:/";
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Spring MVC 进行动态表单和数据绑定 的相关文章

  • java.lang.Class: 在 java 程序中初始化 log4j 属性文件时出错

    我正在尝试使用 log4j 运行独立的 java 程序 但在调试时收到以下消息 控制台上没有 log4j 相关日志 log Logger 1343 java lang Class ERROR in 18b4aac2 有人可以建议这里出了什么
  • 无法加载 jar 文件的主类

    我使用 Eclipse IDE 开发了一个应用程序 创建应用程序后 我以 jar 格式导出项目 当我尝试运行此 jar 文件时 出现错误 无法加载主类 请帮忙 当您将项目导出为 jar 时 请参阅此所以问题 https stackoverf
  • spring - 强制 @Autowired 字段的 cglib 代理

    我有混合堆栈 EJB 和 Spring 为了将 Spring 自动装配到 EJB 我使用SpringBeanAutowiringInterceptor 不确定这是否会影响我遇到的问题 在尝试通过以下方式自动装配 bean 时 Scope p
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • 打印包含 JBIG2 图像的 PDF

    请推荐一些库 帮助我打印包含 JBIG2 编码图像的 PDF 文件 PDFRenderer PDFBox别帮我 这些库可以打印简单的 PDF 但不能打印包含 JBIG2 图像的 PDF PDFRenderer尝试修复它 根据 PDFRedn
  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • 在 Spring MVC 3.2 中实现 JSONP

    据我了解 可以在 Spring MVC 的早期版本中使用自定义过滤器来实现 JSONP 此外这个例子 http www iceycake com 2012 06 xml json jsonp web service endpoints sp
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 如何使用 Mockito 和 Junit 模拟 ZonedDateTime

    我需要模拟一个ZonedDateTime ofInstant 方法 我知道SO中有很多建议 但对于我的具体问题 到目前为止我还没有找到任何简单的解决办法 这是我的代码 public ZonedDateTime myMethodToTest
  • 将 RSA 密钥从 BigIntegers 转换为SubjectPublicKeyInfo 形式

    WARNING 最初的问题是关于 PKCS 1 编码密钥 而问题中的实际示例需要SubjectPublicKeyInfo X 509 编码密钥 我目前正致力于在 java 中从头开始实现 RSA 算法 特别是密钥生成方面 现在我的代码可以给
  • 如何为 Jackson 编写一个包罗万象的(反)序列化器

    当您提前知道类型时 编写自定义序列化器非常容易 例如 MyType一个人可以写一个MyTypeSerializer extends StdSerializer
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • 阻止 OSX 变音符号为所有用户禁用 Java 中的 KeyBindings?

    注 我知道这个问题 https stackoverflow com questions 40335285 java keybinds stop working after holding down a key用户必须输入终端命令才能解决此问
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • Java 编码风格、局部变量与重复方法调用

    我更喜欢使用局部变量而不是多次调用同一方法 I prefer this Vehicle vehicle person getVehicle if vehicle instanceof Car Car car Car vehicle car
  • 为什么 BufferedWriter 不写入文件?

    我有这个代码 String strings Hi You He They Tetrabenzene Caaorine Calorine File file new File G words txt FileWriter fWriter Bu
  • Spring Boot MSSQL Kerberos 身份验证

    目前在我的春季靴子中application properties文件中 我指定以下行来连接到 MSSql 服务器 spring datasource url jdbc sqlserver localhost databaseName spr

随机推荐

  • 具有可变列和特定可编辑单元格的 PrimeFaces 数据表

    我需要创建一个表 其中的标题列表来自模型 表内容也存储在模型中 p dataTable 在数据上循环以根据列名称显示内容 问题是我需要使一些特定的单元格可编辑 对于输出数据 没有问题 因为我使用模型方法 该方法同时采用实体和列名称 并根据列
  • 如何更改变量名称颜色?

    class Foo def init self byte string newline n also newline x0a 在 PyCharm 中 如何更改上例中 byte string 等变量的颜色 我在颜色设置的 Python 部分中
  • 在 emacs 中直观地添加每行信息的最佳方法?

    我正在为 emacs 编写一个次要模式 它至少会计算缓冲区中每一行的数值 我想以视觉方式显示这一点 最好在每行之前整齐地显示 我知道一些次要模式会吸引到边缘 而且我知道叠加也是一种选择 这些相关吗 但我在任何地方都找不到我想要的很好的例子
  • 我有一个新项目,但是当执行 ngserve 时,出现错误

    我需要更改此主题 我无法发布新主题 我已经更新了脚本 并安装了新的软件包 我仍然收到错误 但不是我上次发布的错误
  • 为什么泛型专业化在泛型函数中丢失了

    当我创建依赖于泛型类型的计算属性时 当实例在泛型函数中传递时 特定的实现将 丢失 例如 我添加了isBool on Array返回true if Array Element is Bool extension Array var isBoo
  • angular2如何更改组件的默认前缀以停止 tslint 警告

    看来 当我使用 Angular cli 创建 Angular 2 应用程序时 我的默认组件前缀是 AppComponent 的 app root 现在 当我将选择器更改为其他内容时 说 abc root Component selector
  • 在 Haskell 中创建以下列表 [1, 2, [3, 4], [3, [4, 5]]]

    我正在尝试创建一个包含子列表的列表 例如 1 2 3 4 3 4 5 看来我应该定义一个新类型 我试过 data NestedList a Int a List NestedList a 但我认为这是错误的 或者我不知道如何使用它 我对 H
  • DataGridView 上的自定义排序

    我在 SO 上发现了一些与此类似的问题 但没有一个与此问题匹配 所以我们开始吧 我有一个显示团队成员的 DataGridView 所有团队成员都在其中一列中列出的团队中分配有角色 例如 法律代表 客户经理 助理客户经理 或 会计师 现在事情
  • Blackberry:更改 KeywordFilterField 的排序

    我准备了一个简单的测试用例来演示我的问题 它只有 1 个文件 CheckMenu java 如下所列 并且可以立即运行 一旦用户通过选择 2 个菜单项中的 1 个来更改排序方法 我如何重新绘制底层关键字过滤字段 http www black
  • 根据不同的值对字典进行分组

    基于相似值对字典进行分组很容易 但我很难想出一种相反的好方法 对其中一个键的值与其他值不同的字典进行分组 例如 采取这些 a 1 a 2 b 3 c b 1 a 2 b 3 d c 1 c 2 b 3 d 这些可以分为两个不同的组 其中一个
  • 套接字服务器无法与 JavaScript 套接字客户端连接

    下面是套接字的代码 import java io import java net ServerSocket import java net Socket import java net SocketException import java
  • Blogdown 无法识别hugo.exe

    我是 blogdown 初学者 由于我认为我的会话无法使用 Hugo exe 的问题 我无法开始使用 在 RStudio 中 我创建了一个新项目 并在该项目中运行此代码 输出如下 dir create Web setwd Web blogd
  • iOS - 核心数据和服务器数据库同步最佳实践[重复]

    这个问题在这里已经有答案了 我开始为大型应用程序设置核心数据模型 并希望在服务器数据库和离线功能方面获得有关正确同步方法 技术的一些反馈 我使用 PHP 和 mySQL 作为我的 Web 服务器 数据库 我已经知道如何连接 接收数据 存储到
  • 使用react-form POST 到API?

    可以找到react form的文档here https www npmjs com package react form installation 我在定位 URL 的 POST 操作传递到库的位置和方式时遇到问题 我有一个 API 需要表
  • 使用 addGpsStatusListener 获取 GPS 开始/停止事件

    在一个应用程序中 我想启动一个可以接收两个服务的服务 来自 GPS 的通知 GPS EVENT STARTED 和 GPS EVENT STOPPED 为此 我编写了以下代码 package com test import android
  • 未经许可读取联系人信息?

    我想通过以下方式阅读通讯录Contacts Picker像这样 Intent contactPickerIntent new Intent Intent ACTION PICK Contacts CONTENT URI startActiv
  • 在 Windows 批处理中回显 UTF-8 字符

    我可以使用 echo 生成 UTF 8 文本文件吗 例如 如果我想生成一个包含字符的文件 echo abcd gt out txt 批处理文件使用UTF 8编码 结果是一个 ANSI 编码的文件 并且 字符被转换成 我怎样才能说服echo生
  • 在 Three.js 中对圆柱体进行纹理处理

    我已经关注这个很久了 我只是在任何地方都找不到任何解决方案 我正在尝试在圆柱体上应用 3 种不同的纹理 2 个盖子和侧面 但我完全不知道如何实现这一目标 你能给我指路吗 这就是我现在正在做的事情 var coin1 geo new THRE
  • WPF ScrollViewer:点击=单击,点击并按住/拖动=滚动。如何实现这一目标?

    我正在开发 WPF 触摸应用程序 我有一个包含按钮的滚动查看器 我想在触摸拖动按钮时滚动显示 并在点击时调用按钮的命令 下面是一些入门代码
  • 使用 Spring MVC 进行动态表单和数据绑定

    在我的 Spring MVC 应用程序中 我需要实现一个动态调查表 我有 N 个问题 每个问题有 3 个选项 所以在我的页面中我会有这样的内容 Question 1 1 2 3 Question 2 1 2 3 Question 3 1 2