ネストされたc:loop
を以下で実行しようとしています。ページが読み込まれる前に、リストのリストがitemsextrascatService.getExtrascatByIditems(item)
と表示されます。ここで問題はない、私は正しい数の結果を得る。ただし、ネストされたループは正しく表示されません。休止状態の問題かjstlかどうかは不明です。HIbernate - 多対多 - ネストc:foreach
JSPだから、カテゴリのタイトルはしかし、エキストラは、アイテムとextrascat 1)間違っていると、2)それらはすべてのエクストラをリスト全てではありません、正しい
Fruit
Overy Easy
Syrups
Over Medium
Breakfast Additions
Sunny Side Up
を返し
<c:forEach var="itemsextrascat" items="${itemsextrascat}">
<th><c:out value="${itemsextrascat.extrascat.name}"></c:out> </th><br>
<table>
<c:forEach var="extras" items="${itemsextrascat.extrascat.extras}">
<tr><c:out value="${extras.name}"></c:out></tr>
</c:forEach>
</table>
</c:forEach>
カテゴリの下に。かなり冬眠がどのようにオブジェクトを呼び出すが、私は失われています。
Extrascat.java
@Entity
@Table(name = "extrascat")
public class Extrascat implements Serializable {
private static final long serialVersionUID = 8644201177004602944L;
@Id
private int idextrascat;
private String name;
@ManyToMany(cascade = { CascadeType.ALL }, mappedBy = "extrascat")
private Set<Items> items = new HashSet<Items>();
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "idextras")
private Set<Extras> extras;
// CONSTRUCTORS
public Extrascat() {
}
public Extrascat(int idextrascat, String name, Set<Items> items, Set<Extras> extras) {
this.idextrascat = idextrascat;
this.name = name;
this.items = items;
this.extras = extras;
}
// GETTERS AND SETTERS
public int getIdextrascat() {
return idextrascat;
}
public void setIdextrascat(int idextrascat) {
this.idextrascat = idextrascat;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Items> getItems() {
return items;
}
public void setItems(Set<Items> items) {
this.items = items;
}
public Set<Extras> getExtras() {
return extras;
}
public void setExtras(Set<Extras> extras) {
this.extras = extras;
}
}
Items.java
@Entity
@Table(name = "items")
public class Items implements Serializable {
private static final long serialVersionUID = -3607451001182083512L;
@Id
@GeneratedValue
private int iditems;
@ManyToOne
@JoinColumn(name = "idcategories")
private Categories categories;
@Size(min = 1, max = 35, groups = { PersistenceValidationGroup.class,
FormValidationGroup.class })
private String name;
@Size(min = 0, max = 100, groups = { PersistenceValidationGroup.class,
FormValidationGroup.class })
private String description;
private double priceInCents;
private int hidden;
@OrderColumn
@ManyToMany(cascade = {CascadeType.REMOVE}, fetch = FetchType.LAZY)
@JoinTable(name="itemsextrascat", joinColumns={@JoinColumn(name="iditems")},
inverseJoinColumns={@JoinColumn(name="idextrascat")})
private Set<Extrascat> extrascat = new HashSet<Extrascat>();
// CONSTRUCTORS
public Items() {
}
public Items(int iditems, Categories categories, String name, String description, double priceInCents, int hidden, Set<Extrascat> extrascat) {
this.iditems = iditems;
this.categories = categories;
this.name = name;
this.description = description;
this.priceInCents = priceInCents;
this.hidden = hidden;
this.extrascat = extrascat;
}
// GETTERS AND SETTERS
public int getIditems() {
return iditems;
}
public void setIditems(int iditems) {
this.iditems = iditems;
}
public Categories getCategories() {
return categories;
}
public void setCategories(Categories categories) {
this.categories = categories;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public double getPriceInCents() {
return priceInCents;
}
public void setPriceInCents(double priceInCents) {
this.priceInCents = priceInCents;
}
public int isHidden() {
return hidden;
}
public void setHidden(int hidden) {
this.hidden = hidden;
}
public Set<Extrascat> getExtrascat() {
return extrascat;
}
public void setExtrascat(Set<Extrascat> extrascat) {
this.extrascat = extrascat;
}
public int getHidden() {
return hidden;
}
}
Itemsextrascat.java
@Entity
@Table(name = "itemsextrascat")
public class Itemsextrascat implements Serializable {
private static final long serialVersionUID = 7640244484584804821L;
@Id
@GeneratedValue
private int iditemsextrascat;
@ManyToOne
@JoinColumn(name = "iditems")
private Items items;
@ManyToOne
@JoinColumn(name = "idextrascat")
private Extrascat extrascat;
// CONSTRUCTORS
public Itemsextrascat() {
}
public Itemsextrascat(int iditemsextrascat, Items items, Extrascat extrascat) {
this.iditemsextrascat = iditemsextrascat;
this.items = items;
this.extrascat = extrascat;
}
// GETTERS AND SETTERS
public int getIditemsextrascat() {
return iditemsextrascat;
}
public void setIditemsextrascat(int iditemsextrascat) {
this.iditemsextrascat = iditemsextrascat;
}
public Items getItems() {
return items;
}
public void setItems(Items items) {
this.items = items;
}
public Extrascat getExtrascat() {
return extrascat;
}
public void setExtrascat(Extrascat extrascat) {
this.extrascat = extrascat;
}
}
Extras.java
@Entity
@Table(name = "extras")
public class Extras implements Serializable {
private static final long serialVersionUID = 8644201177004602944L;
@Id
private int idextras;
private String name;
private double priceincents;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "idextrascat")
private Extrascat extrascat;
@ManyToMany(cascade = { CascadeType.ALL }, mappedBy = "extras")
private Set<Orderitem> orderitem = new HashSet<Orderitem>();
// CONSTRUCTORS
public Extras() {
}
public Extras(int idextras, String name, double priceincents, Extrascat extrascat) {
this.idextras = idextras;
this.name = name;
this.priceincents = priceincents;
this.extrascat = extrascat;
}
// GETTERS AND SETTERS
public int getIdextras() {
return idextras;
}
public void setIdextras(int idextras) {
this.idextras = idextras;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPriceincents() {
return priceincents;
}
public void setPriceincents(double priceincents) {
this.priceincents = priceincents;
}
public Extrascat getExtrascat() {
return extrascat;
}
public void setExtrascat(Extrascat extrascat) {
this.extrascat = extrascat;
}
}
サービスとDaoと一緒にitemsextrascat.javaを削除し、c:foreach – Marios
の項目や追加項目を照会してください。UI用に別のBeanを作成することをお勧めします。エンティティBeanはバックエンドロジック処理用です。 –
有効なHTMLを生成することから始めます。 trの中にテキストを直接入れることはできません。 thはmdtをtrに、tdにも含めます。テストは、thまたはtdの内側にある必要がありますが、trに直接はありません。 2つの異なるものに対して同じ変数名(itemsextrascat)を使用しないでください。 1つのもの(1つの余分なもの)を指すために複数形(補足品、品目など)を使用しないでください。 –