在easyui API中可以知道,easyui tree支持树控件的异步加载,用户可以从后台动态获取,返回json数据,来完成异步请求。
1、树的json格式:
[{
"id":1,
"text":"My Documents",
"children":[{
"id":11,
"text":"Photos",
"state":"closed",
"children":[{
"id":111,
"text":"Friend"
},{
"id":112,
"text":"Wife"
},{
"id":113,
"text":"Company"
}]
},{
"id":12,
"text":"Program Files",
"children":[{
"id":121,
"text":"Intel"
},{
"id":122,
"text":"Java",
"attributes":{
"p1":"Custom Attribute1",
"p2":"Custom Attribute2"
}
},{
"id":123,
"text":"Microsoft Office"
},{
"id":124,
"text":"Games",
"checked":true
}]
},{
"id":13,
"text":"index.html"
},{
"id":14,
"text":"about.html"
},{
"id":15,
"text":"welcome.html"
}]
}]
其中的state可为open或closed,异步加载就是当展开一个封闭的节点时,如果节点没有加载子节点,它将把节点id作为http请求参数并命名为‘id’,在服务器上检索。
2、tree的声明:
1)在html写一个ul:
<ul id="tree"></ul>
2)js中
$('tree').tree({
url:'/EasyuiDemo/loadTree'// 本人的项目名为EasyuiDemo
});
3、java代码中
后台实现的就是根据id查找是否有子节点,然后返回数据,写法大同小异,下面是笔者的思路,这里用的是Spring + SpringMVC +Spring JDBCTemplate
1)tree的bean类
public class Tree {
private String id;//节点
private String pid;//父节点
private String text;//显示内容
private String state;// 是否为封闭节点,即有子节点
public Tree() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
@Override
public String toString() {
return "Tree [id=" + id + ", pid=" + pid + ", state=" + state + "]";
}
}
2)controller层
@Controller
public class treeController{
@Autowired
treeService service;
@RequestMapping(value="/loadTree")
public void loadTree(HttpServletRequest request,HttpServletResponse response,String id) throws Exception{
response.setCharacterEncodiung("UTF-8");
if(id==null){
id="0";
}
List list = new ArrayList();
list= service.loadTeee(id);
response.getWriter().write(new Gson().toJson(list));
}
}
3)service层
@Service
public treeService {
@Autowirwd
treeDao dao;
public List loadTree(String id){
List<Tree> list = dao.LoadTree(id);
return list
}
}
4) dao层
@Repository
public class treeDao{
@Autowired
private JdbcTemplate template;
public List loadTree(String id){
String sql = "select * from tree where pid ="+id;
return template.query(sql ,new TreeRowMapper());
}
public int countTree(String id){
String sql ="select count(*) from tree where pid = "+id;
return template.queryForInt(sql);
}
class TreeRowMapper implements RowMapper{
public Object mapRow(ResultSet rs,int arg) throws SQLException {
Tree tree = new Tree()
Tree tree = new Tree();
tree.setId(rs.getString("id"));
tree.setPid(rs.getString("pid"));
tree.setText(rs.getString("text"));
if(countTree(rs.getString("id"))>0){
tree.setState(rs.getString("closed"));
}
}
}
}
这里的大概意思是,根据id查询其子节点,即sql:”select * from tree where pid“ = id,,让后返回List<Tree>集合,countTree(String id)函数的作用是判断当前节点是否有子节点,有则设置state为closed。
4、数据库
三个字段:id,text,pid
注:数据库中字段名称可以随意命名,但是easyui-tree加载的数据必须是上面的json格式及对应命名
如果这种实现方式不是你想要的,可以参考easyui中文网的这种实现:easyui延迟加载树
由于某原因,不能直接拷贝工作区中的代码,上面的代码是在无编译环境的机器上打的,博客布局和代码排版有点乱,多多见谅。
本文介绍了EasyUI Tree控件如何实现异步加载,通过返回json数据动态加载子节点。当展开节点时,后台根据节点ID查询子节点信息。文章详细讲解了json数据格式、树的声明方法、Java后台的实现逻辑以及数据库结构,并提供了相关资源链接供参考。由于格式限制,部分代码未展示。
823

被折叠的 条评论
为什么被折叠?



