当前位置: 首页 > 面试题库 >

HTML表单提交不适用于Spring Boot 2.3.1

狄峻熙
2023-03-14
问题内容

从Spring Boot 2.2.7切换到Spring Boot 2.3.1后,针对我的特定情况,在提交表单时进行实体转换不再起作用

Category.java

@Entity @Getter @Setter
public class Category implements Serializable {
    private Integer id;
    private String name;
}

SearchForm.java:

@Getter @Setter
public class SearchForm implements Serializable {
    private String q;
    private Category c;
}

HTML形式:

<form method="get" th:action="@{/}" th:object="${searchForm}">
    <input th:field="*{q}" type="text" />
    <select th:field="*{c}">
        <option th:each="cat : ${categories}" th:value="${cat.id}"  th:text="${cat.name}" />
    </select>
</form>

Controller.java:

@PostMapping
public String post( @ModelAttribute final SearchForm searchForm ) {
    // ...
}

以前使用Spring Boot 2.2.7提交表单时,会将HTML表单中的“ c”(选择保留类别ID)转换为SearchForm.java中的类别实体

切换到Spring Boot 2.3.1之后,它不再起作用。而是在日志中显示错误:

字段“ c”上的对象“
searchForm”中的字段错误:拒绝的值[424];代码[typeMismatch.searchForm.c,typeMismatch.c,typeMismatch.com.thevegcat.app.category.Category,typeMismatch];参数[org.springframework.context.support.DefaultMessageSourceResolvable:代码[searchForm.c,c];
参数[];
默认消息[c]];默认消息[无法将类型’java.lang.String’的属性值转换为属性’c’的必需类型’com.thevegcat.app.category.Category’;嵌套异常为java.lang.IllegalStateException:无法将属性“
c”的类型“ java.lang.String”的值转换为所需的类型“
com.thevegcat.app.category.Category”:未找到匹配的编辑器或转换策略]]


问题答案:

我认为这是Spring Data Commons的错误:

  • 将URI段和请求参数转换为汇总的结果

此错误影响Spring Boot版本2.3.1、2.2.8和2.1.15。

ToEntityConverter
不能按预期工作。

[更新]

此错误已在2.4.0-M1、2.3.2和2.2.9中修复,但未在2.1.16中修复。

参考:

  • https://docs.spring.io/spring-data/commons/docs/current/changelog.txt


 类似资料:
  • 从spring boot 2.2.7切换到spring boot 2.3.1后,针对我的特定案例提交表单时的实体转换不再有效 category.java searchForm.java: HTML表单: controller.java: 以前在spring boot 2.2.7form submit将“C”从HTML表单(select持有类别的ID)转换为SearchForm.java中的类别实体

  • 问题内容: 我有一个表格。在该表格之外,我有一个按钮。一个简单的按钮,如下所示: 但是,当我单击它时,它会提交表单。这是代码: 该按钮应该做的就是编写一些JavaScript。但是,即使看起来像上面的代码一样,它也会提交表单。当我将标签按钮更改为跨度时,它可以完美工作。但不幸的是,它必须是一个按钮。有什么办法可以阻止该按钮提交表单?像例如 问题答案: 我认为这是HTML最令人讨厌的小特性。该按钮必

  • 所以首先,当我使用时,这段代码是有效的。但是一旦我将其更改为它就停止工作。我是新来的,所以我不确定问题会从哪里来。我想做的就是为我的数据库节省时间。 错误是: 这是我映射到表单的对象: 这是我的控制器: 这是超文本标记语言形式:

  • 问题内容: 我希望HTML表单在提交后不执行任何操作。 这是不好的,因为它会导致页面重新加载。 基本上,我希望每当按下按钮或有人在键入数据后单击“输入”时都调用ajax函数。是的,我可以删除表单标签并添加,只需从按钮的onclick事件中调用该函数即可,但是我也希望“命中进入”功能而不会引起任何麻烦。 问题答案: 通过在通过“提交”按钮调用的javascript中使用,可以停止提交表单。 基本上,

  • 嗨,伙计们,我一直与使用超文本标记语言和PHP的网站之一有麻烦 表单似乎没有提交或发送消息。附件是代码请任何帮助将是伟大的。另外,还附上了PHP和javascript作为参考。有时页面也不响应按钮。如果有人能修复代码将是伟大的。

  • 问题内容: 我试图使用此示例使用AJAX提交HTML表单。 我的HTML代码: 我的剧本: 这是行不通的,我什至没有收到警告消息,提交时我不想重定向到另一个页面,我只想显示警告消息。 有简单的方法吗? PS:我有几个领域,我仅举两个例子。 问题答案: AJAX快速描述 AJAX只是异步JSON或XML(在大多数新情况下为JSON)。因为我们正在执行ASYNC任务,所以我们很可能会为我们的用户提供更