easyui---tree异步加载
1、ul li的多级列表的html代码tree
2、利用jquery
<ul id="tt"></ul> $('#tt').tree({ url:'tree_data.json' //会发送异步请求返回tree数据 });
tree实体类:
public class Tree { private int id ; private String name ; private String url ; private int checked ; private String icon ; private int parent_id ; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public int getChecked() { return checked; } public void setChecked(int checked) { this.checked = checked; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public int getParent_id() { return parent_id; } public void setParent_id(int parent_id) { this.parent_id = parent_id; }
treeVO 返回jsontree格式,必须这种形式tree,才能渲染成树:
public class TreeVO { private int id; private String text; private int parent_id; private String icon ; private String state ; private Map<String,Object> map=new HashMap<String ,Object>(); //用个map接收自定义属性,必须map,转为json后,是{"a":"","b":..}这种格式,同时具有可扩展性 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public int getParent_id() { return parent_id; } public void setParent_id(int parent_id) { this.parent_id = parent_id; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public String getState() { return state; } public void setState(String state) { this.state = state; } public Map<String, Object> getMap() { return map; } public void setMap(Map<String, Object> map) { this.map = map; } }
import com.bjsxt.dto.TreeVO; public interface TreeDao { List<TreeVO> getTreeByParentId(String id); }
public class TreeDaoImpl implements TreeDao { @Override public List<TreeVO> getTreeByParentId(String id) { String sql; if(id==null || id==""){ //刚开始页面加载完成之后,页面出现根节点,这时,前台不带参数id,只有点击closed的节点才会发送一个请求,携带id
int pid=2340; sql ="select * from tree where parent_id ="+2340; System.out.println(sql); }else{//点击这些关闭的节点时才会发送一个url,同时携带这个节点的id,为什么easyui树高效,dtree不行,dtree是一打开页面加载所有的节点,而easyUi是点击节点才会异步发送一个请求,获取该节点下直接子节点渲染成树
int pid=Integer.valueOf(id); sql ="select * from tree where parent_id ="+pid; System.out.println(sql); } Connection conn = DBUtils.createConn(); PreparedStatement ps = DBUtils.getPs(conn, sql); try { ResultSet rs = ps.executeQuery(); List<Tree> treeList =new ArrayList<Tree>(); while(rs.next()){ Tree tree=new Tree(); tree.setId(rs.getInt("id")); tree.setChecked(rs.getInt("checked")); tree.setIcon(rs.getString("icon")); tree.setName(rs.getString("name")); tree.setParent_id(rs.getInt("parent_id")); tree.setUrl(rs.getString("url")); treeList.add(tree); } List<TreeVO> treeVOlist = this.tochange(treeList); System.out.println(treeList+"treelist"); return treeVOlist; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } private List<TreeVO> tochange(List<Tree> treeList){ List<TreeVO> treeVOlist =new ArrayList<TreeVO>(); for (Tree tree : treeList) { TreeVO treeVO =new TreeVO(); treeVO.setId(tree.getId()); List<Tree> tls = this.distinguish(tree.getId()); if(tls.isEmpty()){ treeVO.setState("open"); }else{ treeVO.setState("closed"); } treeVO.setIcon(tree.getIcon()); treeVO.setParent_id(tree.getParent_id()); treeVO.setText(tree.getName()); Map<String,Object> hashMap=new HashMap<String,Object>(); hashMap.put("url", ""); treeVO.setMap(hashMap); treeVOlist.add(treeVO); } System.out.println(treeList+"treelist1"); return treeVOlist; } private List<Tree> distinguish(int id){//判断节点下面有没有子节点,有的话,下面的子节点不为空,没有的话就是叶子节点,这时会自动渲染成
String sql ="select * from tree where parent_id ="+id; Connection conn = DBUtils.createConn(); PreparedStatement ps = DBUtils.getPs(conn, sql); try { ResultSet rs = ps.executeQuery(); List<Tree> treeList =new ArrayList<Tree>(); while(rs.next()){ Tree tree=new Tree(); tree.setId(rs.getInt("id")); tree.setChecked(rs.getInt("checked")); tree.setIcon(rs.getString("icon")); tree.setName(rs.getString("name")); tree.setParent_id(rs.getInt("parent_id")); tree.setUrl(rs.getString("url")); treeList.add(tree); } return treeList; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }
@WebServlet("/tree") public class Tree extends HttpServlet { private static final long serialVersionUID = 1L; private TreeDao treeDao =new TreeDaoImpl(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String method = request.getParameter("method"); if(method.equals("getTree")){ getTree(request,response); } } private void getTree(HttpServletRequest request, HttpServletResponse response) { String id = request.getParameter("id"); List<TreeVO> treeList=treeDao.getTreeByParentId(id); response.setContentType("text/html;charset=utf-8"); try { response.getWriter().write(JSONArray.fromObject(treeList).toString()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
下面的代码多余的:
不需要转化int,拼接的sql,就是按照就是按照int,如果用字符串还需要在sql中''
if(id==null || id==""){ int pid=2340; //不需要 sql ="select * from tree where parent_id ="+2340; System.out.println(sql); }else{ int pid=Integer.valueOf(id);//不需要 sql ="select * from tree where parent_id ="+pid; System.out.println(sql); }
-----
海纳百川 ,有容乃大