2017-07-07 11 views
1

私は、PackageクラスとUserクラスを持つSpring BootとThymeleafを使用してアプリケーションを開発しています。Thymeleaf + Spring Boot:関連オブジェクトによるオブジェクト作成(フォーム&リターン)

パッケージクラス:

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

私がobjeに関連する前に私は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?

を問題が見つかりません。私はまた、私のコントローラでのリターンの処理方法について興味がありますが、DB上のsave関数の前にオブジェクト全体を挿入すると仮定します。何か案は?

ありがとうございます。

EDIT遅れて申し訳ありませんが、出張中でした。ここで

は、コントローラです:

@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

あなたのクラスの適切なフィールド名を使用するので、package_ownerためuserを切り替えたり、あなたのコメントで行ったように、あなたは反対のことを行うことができますする必要があります。

+1

実際には反対に、userのインスタンス名を 'package_owner 'ユーザーに'ええ、それはうまくいった。 –

関連する問題