java - Thymeleaf + Spring Boot : Object creation with related object (Form & Return)

标签 java spring thymeleaf

我正在使用 Spring Boot 和 Thymeleaf 开发一个应用程序,其中有一个 Package 类和一个 User 类。

封装类别:

@Entity
@Table(name = "table_package")
public class Package {

    @Id
    @GenericGenerator(name = "gen_id", strategy = "increment")
    @GeneratedValue(generator = "gen_id")
    private Integer id;

    @ManyToOne
    @JoinColumn(name = "userid")
    @JsonBackReference
    private User package_owner;
//    private Integer userid;

    private String package_name;

    @OneToMany(mappedBy = "pkg")
    @JsonBackReference
    private Set<Article> articles;

    @ManyToOne
    @JoinColumn(name = "package_statusid")
    @JsonBackReference
    private PackageStatus packageStatus;
//    private Integer package_statusid;

    private String notes;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public User getPackage_owner() {
        return package_owner;
    }

    public void setPackage_owner(User package_owner) {
        this.package_owner = package_owner;
    }

//    public Integer getUserid() {
//        return userid;
//    }
//
//    public void setUserid(Integer userid) {
//        this.userid = userid;
//    }

    public String getPackage_name() {
        return package_name;
    }

    public void setPackage_name(String package_name) {
        this.package_name = package_name;
    }

    public Set<Article> getArticles() {
        return articles;
    }

    public void setArticles(Set<Article> articles) {
        this.articles = articles;
    }

    public PackageStatus getPackageStatus() {
        return packageStatus;
    }

    public void setPackageStatus(PackageStatus packageStatus) {
        this.packageStatus = packageStatus;
    }

    public String getNotes() {
        return notes;
    }

    public void setNotes(String notes) {
        this.notes = notes;
    }

    @Override
    public String toString() {
        return "Package{" +
                "id=" + id +
                ", package_owner=" + package_owner +
                ", package_name='" + package_name + '\'' +
                ", articles=" + articles +
                ", packageStatus=" + packageStatus +
                ", notes='" + notes + '\'' +
                '}';
    }
}

用户类别:

@Entity
@Table(name = "table_user")
public class User {

    @Id
    @GenericGenerator(name="gen_id" , strategy="increment")
    @GeneratedValue(generator="gen_id")
    private Integer id;

    @OneToMany(mappedBy = "package_owner")
    @JsonBackReference
    private Set<Package> packages = new HashSet<Package>();

}

我正在为包装说明书编写一个屏幕

包添加/插入:

<form action="#" th:action="@{/packages/add}" th:object="${Package}" method="post">
    <table class="table stripped-table" id="article-table">
        <tr>
            <th>
                User:
            </th>
            <td>
                <input type="text" id="user-search"/>
                <input type="text" th:value="*{user.id}" hidden="hidden" th:required="required"/>
            </td>
        </tr>
        <tr>
            <th>
                Package:
            </th>
            <td>
                <input type="text" th:field="*{package_name}" th:required="required"/>
            </td>
        </tr>
    </table>
    <input type="submit" id="submit" value="Add" />
</form>

在关联它们之间的对象之前,我使用 JavaScript 的自动完成功能在“用户搜索”上写入名称,将值插入到 user_id 输入中,然后将其传递给我的 Controller 。

但是现在我已经创建了两个对象之间的关系,每次尝试加载模板时都会收到此错误:

bean 类 [com.app.model.Package] 的属性“user”无效:Bean 属性“user”不可读或具有无效的 getter 方法:getter 的返回类型与 setter 的参数类型匹配吗?

我一直在研究 getter 和 setter,但找不到问题。我也很好奇应该如何在我的 Controller 上处理返回,但我假设将在数据库上的保存函数之前插入整个对象。有什么想法吗?

提前致谢。

编辑抱歉耽搁了,我正在出差。

这是 Controller :

@RequestMapping(value = "add", method = RequestMethod.GET)
public ModelAndView addPackageForm(Model model){

    List<PackageStatus> packageStatuses = packageStatusRepository.findAll();

    model.addAttribute("Package", new Package());
    model.addAttribute("PackageStatus", packageStatuses);
    ModelAndView mav = new ModelAndView("packages/add");
    mav.addObject("page_title", "Test: Add Package");
    mav.addObject("template_primary", "packages");
    mav.addObject("template_secondary", "add");
    return mav;
}

最佳答案

您需要使用类的正确字段名称,因此将 user 切换为 package_owner 或者正如您在评论中所做的那样,您可以执行相反的操作。

关于java - Thymeleaf + Spring Boot : Object creation with related object (Form & Return),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44977135/

相关文章:

java - 无法从迭代自然数的线程中打印所有数字

java - 创建新的自定义对象与在 Java 中将同一对象的多个值设置为 Null

java - 自定义联接表使 Spring Data 抛出 IllegalArgumentException : Expected id attribute type

java - 使用 Spring Web Flow 绑定(bind)模型以查看

javascript - jQuery 加载 + Thymeleaf

Java接口(interface)方法调用

java - 为什么 Sun 的 Arrays.sort 实现创建输入数组的克隆?

java - 多 bean 服务中一个服务 bean 的 Cxf 故障拦截器

java - 在 Controller 中处理删除请求的正确方法是什么?

java - JPA:2个应用程序需要更新一个对象