2017-07-07 139 views
1

我正在开发一个使用Spring Boot和Thymeleaf的应用程序,其中我有一个Package类和一个User类。Thymeleaf + Spring Boot:使用相关对象创建对象(Form&Return)

软件包类:

@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> 

在我涉及这个目标之前他们之间的CTS我正在使用JavaScript的自动完成在'user-search'上写下名字,将值插入到user_id输入中,并将其传递给我的控制器。

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

Invalid property 'user' of bean class [com.app.model.Package]: Bean property 'user' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

我一直在寻找的getter和setter,但可以找不到问题。我也很好奇如何在我的控制器上处理返回值,但我认为会在DB上的保存功能之前插入整个对象。有任何想法吗?

在此先感谢。

编辑对不起,我出差了。

这里的控制器:

@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; 
} 
+0

我推荐你MVC模式 –

+0

如果你使用'package_owner'而不是用户,它是否工作?我的推理是你没有一个名为'user'的包,只有'User'字段名'package_owner'。 –

+0

你能告诉我们控制器吗? –

回答

0

您需要使用您的类的适当的字段名称,所以切换userpackage_owner或者您在您的评论一样,你可以做相反的事情。

+1

我实际上做了相反的事情,只是将用户的实例名称从'package_owner '用户',但是,它的工作。 –