所以我需要为我的 gwt 项目创建一个包含树项的树。我正在使用复合模式来存储需要放置在树中的所有信息。
用户有一个扩展层次结构的根文件夹,该根文件夹有一个层次结构对象列表,可以是文件位置或文件夹。我遇到的麻烦是根据这种模式构建我的树。这些数据全部使用 hibernate 存储在 mysql 数据库中
我如何能够将其实现为 gwt 中的树。
此外,我创建的树项目必须引用回该对象,以便我可以重命名或移动它。
@Entity
@Table(name ="HIERARCHY")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(
name = "HIERARCHY_TYPE", discriminatorType = DiscriminatorType.STRING)
public abstract class Hierarchy implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "hierarchy_id", updatable = false, nullable = false)
private int hId;
@Entity
@DiscriminatorValue("F")
public class Folder extends Hierarchy {
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(name = "FOLDER_JOIN_FILELOCATION", joinColumns = {
@JoinColumn(name = "folder_id") }, inverseJoinColumns = {
@JoinColumn(name = "file_information_id") })
private List<Hierarchy> children = new ArrayList<Hierarchy>() ;
@Column(name = "folder_name")
private String folderName;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
@JoinTable(name="FOLDER_JOIN_FOLDER",
joinColumns = @JoinColumn(name="parent_folder_id"),
inverseJoinColumns = @JoinColumn(name="folder_ID")
)
private Hierarchy parent;
@Entity
@DiscriminatorValue("FI")
public class FileInformation extends Hierarchy {
@Column (name = "location")
private String location;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
@JoinTable(name="FILEINFORMATION_JOIN_FOLDER",
joinColumns = @JoinColumn(name="filelocation_id"),
inverseJoinColumns = @JoinColumn(name="folder_ID")
)
private Hierarchy parent;
现在我想基于这个结构构建树。如果我的逻辑是错误的,你能指出我正确的方向
Tree tree = new Tree();
现在,对于文件夹中的每个文件夹或文件信息,我想创建一个树项目?该树项还必须引用回对象本身
最佳答案
这一切都可以通过 GWT-RPC requests 轻松完成到您的服务器和 Tree和 TreeItem客户端中的类。
启动时(或者当您想要第一次显示树时),调用您的服务,并在回调中使用tree.addItem()
将这些项目添加到树中。这在很大程度上取决于数据库的结构以及将信息传递给客户端的方式,但这应该可以帮助您入门。
另一个选择是使用 GWT-incubator的FastTree类,这适用于显示大型树,以及仅在打开文件夹时加载数据。
关于java - 我如何向我的 gwt 树提供数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2621851/