richfaces recursiveTreeNodesAdaptor.My 엔티티 클래스를 사용하여 솔기에 동적 트리를 만들고 싶습니다.recursiveTreeNodesAdaptor를 사용하여 Seam에서 동적 트리 만들기
@Entity
public class Category extends Item implements Serializable {
private static final long serialVersionUID = -1154500438874768209L;
private List<Item> children;
public void addChild(Item child) {
if (children == null) {
children = new ArrayList<Item>();
}
if (!children.contains(child)) {
children.add(child);
}
}
@OneToMany(cascade = CascadeType.ALL)
public List<Item> getChildren() {
return children;
}
public void setChildren(List<Item> children) {
this.children = children;
}
}
@Entity
public class Product extends Item implements Serializable {
private static final long serialVersionUID = 3975153531436996378L;
}
@Inheritance(strategy = InheritanceType.JOINED)
@Entity
public class Item {
private String name;
private Long id;
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
여기에이 클래스를 사용합니다.
@Name("provider")
@Scope(ScopeType.APPLICATION)
public class OrganisationProvider implements Serializable {
private static final long serialVersionUID = 1L;
public Category organization;
public OrganisationProvider() {
if (organization == null) {
setOrganization(createOrganization());
}
}
public Category createOrganization() {
Category ROOT = new Category();
Category computerC = new Category();
Category printerC = new Category();
Category telephoneC = new Category();
Product product = new Product();
ROOT.setName("ROOT");
computerC.setName("BilgisayarC");
printerC.setName("YazıcılarC");
telephoneC.setName("TelephoneC");
computerC.addChild(printerC);
ROOT.addChild(computerC);
ROOT.addChild(product);
return ROOT;
}
public void setOrganization(Category organization) {
this.organization = organization;
}
public Category getOrganization() {
return organization;
}
}
내 .xhtml 페이지는;
<ui:define name="body">
<h:form>
<rich:panel id="dynamicTreePanel"
header="Dynamic Tree User Interface">
<rich:tree>
<rich:recursiveTreeNodesAdaptor roots="#{provider.organization}"
var="rootOrg">
<rich:treeNode>
<h:outputText value="#{rootOrg.name}" />
</rich:treeNode>
<rich:recursiveTreeNodesAdaptor roots="#{rootOrg.children}"
var="childOrg" nodes="#{childOrg.children}">
<rich:treeNode>
<h:outputText value="#{childOrg.name}" />
</rich:treeNode>
</rich:recursiveTreeNodesAdaptor>
</rich:recursiveTreeNodesAdaptor>
</rich:tree>
</rich:panel>
</h:form>
</ui:define>
배포 페이지에서 루트를 클릭하면이 오류가 발생합니다.
javax.faces.FacesException : javax.el.PropertyNotFoundException : /dynamicItemTree.xhtml @ 23,52 nodes = "# {childOrg.children}": 'a.b.c.d.Product'클래스에는 'children'속성이 없습니다.
을 구현하지만 우리는 실체를 통해 entityMapping을하고 있습니다 어느. null을 리턴하는 Product에서 메소드를 구현할 때, 프로그램은 해당 메소드에 대한 데이터베이스에 새로운 컬럼을 작성하려고 시도하는데, 나는이 에러를 취한다. – shafak
org.hibernate.MappingException : java.util.List에 대한 타입을 결정할 수 없습니다 : 테이블 : Product, 컬럼 : [org.hibernate.mapping.Column (children)] – shafak
getChildren 메소드를 Product와 null를 돌려줍니다. 이렇게하면 db에 열이 만들어지지 않습니다. "깨끗한"솔루션은 아니지만 작동 속도는 빠릅니다. 확실하지는 않지만 트리 아답터에서 직접 아는 한 처리 할 수도 있습니다. 그게 왜 거기에. –