所以我需要为我的gwt项目创建一个带树项的树。我正在使用复合模式来存储我需要放在树中的所有信息。
用户有一个扩展层次结构的根文件夹,然后该根文件夹有一个层次结构对象列表,可以是FileLocations或Folders。麻烦我正在基于这种模式构建我的树。这些数据都是在mysql数据库中使用hibernate存储的
我如何能够在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();
现在,对于文件夹中的每个文件夹或文件信息,我想创建一个树项?该树项还必须引用回对象本身
答案 0 :(得分:1)
使用GWT-RPC requests到服务器以及客户端中的Tree和TreeItem类,这一切都可以轻松完成。
在启动时(或者当您想第一次显示树时),请调用您的服务,并在回调中使用tree.addItem()
将这些项添加到树中。这很容易取决于数据库的结构以及如何将信息传递给客户端,但这应该可以帮助您入门。
另一种选择是使用GWT-incubator的FastTree类,这对于显示大树很有用,并且仅用于在打开文件夹时加载数据。
答案 1 :(得分:0)
您必须遍历您的文件夹/层次结构并找到父节点,然后将此父节点添加到一个TreeItem t ,然后找到父节点 children,并将它们添加到 t ,现在为每个找到的孩子做同样的事情。