spring @joinColumn 对象未将 html 传递给控制器

问题描述 投票:0回答:2

我是编码菜鸟。

我基于编码的春季宠物诊所。

现在不传递对象

<div th:replace="~{::caller-select('사이트', 'hstry_site', ${historySites})}"></div>
<div th:replace="~{::caller-select('유형', 'hstry_type', ${historyTypes})}"></div>
<div th:replace="~{::caller-input('문의 내용', 'hstry_content')}"></div>

'hstry_content' 好的。但 'hstry_site' 和 'hstry_type' 不通过。

chrome开发模式>网络>formdata>3值都OK。

我可以知道如何修复吗?

控制器打印对象如下。

[History@23d723c8 hstry_id = [null], hstry_call_time = [null], hstry_content = '12312312', hstry_site = [null], hstry_type = [null], tel_no = '01000000001']

下面是历史课。

@Column(name = "hstry_content")
private String hstry_content;

@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "hstry_type_id", referencedColumnName = "id", insertable = false, updatable = false)
private HistoryType hstry_type;

@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "hstry_site_id", referencedColumnName = "id", insertable = false, updatable = false)
private HistorySite hstry_site;

当更改列信息时

//  @Column(name = "hstry_type_id")
//  private Integer hstry_type;
//
//  @Column(name = "hstry_site_id")
//  private Integer hstry_site_id;

它传递给控制器。

spring thymeleaf
2个回答
0
投票

您似乎在 Spring 应用程序中传递

hstry_site
hstry_type
对象时遇到问题,可能与 Thymeleaf 模板和表单提交有关。让我们分解一下步骤,以确保这些对象正确传递到您的控制器。

1. Thymeleaf 模板更改

确保您的 Thymeleaf 模板(

caller-select
caller-input
片段)正确绑定到
hstry_site
hstry_type

<!-- For hstry_site -->
<div th:replace="~{::caller-select('사이트', 'hstry_site', ${historySites})}"></div>

<!-- For hstry_type -->
<div th:replace="~{::caller-select('유형', 'hstry_type', ${historyTypes})}"></div>

<!-- For hstry_content -->
<div th:replace="~{::caller-input('문의 내용', 'hstry_content')}"></div>

确保:

  • historySites
    historyTypes
    已正确填充到您的控制器模型中。
  • 下拉列表或选择输入正确绑定到
    hstry_site
    hstry_type

2.控制器处理

在控制器方法中,确保正确接收和处理这些对象。

@PostMapping("/saveHistory")
public String saveHistory(@ModelAttribute("history") History history) {
    // Check the values received in history object
    System.out.println(history);
    // Save logic or further processing
    return "redirect:/success"; // Redirect to success page or another endpoint
}

3.实体映射

确保您的

History
实体正确映射到
HistorySite
HistoryType

@Entity
public class History {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long hstry_id;

    @Column(name = "hstry_content")
    private String hstry_content;

    @ManyToOne(cascade = {CascadeType.ALL})
    @JoinColumn(name = "hstry_type_id", referencedColumnName = "id", insertable = false, updatable = false)
    private HistoryType hstry_type;

    @ManyToOne(cascade = {CascadeType.ALL})
    @JoinColumn(name = "hstry_site_id", referencedColumnName = "id", insertable = false, updatable = false)
    private HistorySite hstry_site;

    // Getters and setters
}

确保

HistoryType
HistorySite
实体也正确定义和映射。

4.级联和 ID 字段

如果您更改为直接使用

Integer
字段(
hstry_type_id
hstry_site_id
),请记住相应地更新您的实体和控制器。此更改可能会影响您处理表单提交和数据库操作的方式。

总结

仔细检查:

  • 用于正确绑定和下拉/选择选项的 Thymeleaf 模板。
  • 正确处理
    @ModelAttribute
    的控制器方法。
  • 实体映射和更改(特别是切换到直接 ID 字段时)。

通过确保这些步骤,您应该能够正确地将

hstry_site
hstry_type
对象传递到控制器,并按预期将它们保留在数据库中。


0
投票

解决这个问题。

public String processAddCallerForm(Caller caller, @Valid History 历史记录, BindingResult 结果, @PathVariable("tel_no") String tel_no) { }

  1. 此代码包含参数“BindingResult result”。所以我无法在temical中捕获错误消息,删除“BindingResult result”后,我可以看到这样的错误消息:

字段“hstry_site”上的对象“历史”中的字段错误:拒绝值[리드인];代码 [typeMismatch.history.hstry_site、typeMismatch.hstry_site、typeMismatch。 ......

  1. petclinic有'PetTypeFormatter.java',在typeMismatch之前,我没有'HistoryTypesFormatter.java'和'HistorySitesFormatter.java'。 添加“HistoryTypesFormatter.java”和“HistorySitesFormatter.java”后。解决类型不匹配问题。

感谢回复,并帮忙解决。

© www.soinside.com 2019 - 2024. All rights reserved.