数据库是sql server 
4个表是:公司,部门,小组,员工公司是根节点,然后是部门,小组,最后是员工
每个节点前有单选框这样的功能在struts2中怎么实现?
最好给一个例子

解决方案 »

  1.   

    老大,您这是在出考试题么?
    光使用Struts2不够吧?贴个用JDBC的例子:
    Dao层:
    //完成树型结构的递归读取
    public class ClientTreeReader {
    private StringBuffer sbTreeHTML = new StringBuffer();
    //返回HTML字符串
    public String getClientTreeHTMLString() {
    Connection conn = null;
    try {
    conn = DbUtil.getConnection();
    readClientTree(conn, 0, 0);
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    DbUtil.close(conn);
    }
    return sbTreeHTML.toString();
    } //递归读取分销商树
    private void readClientTree(Connection conn, int id, int level)throws SQLException {
    String sql = "select * from t_client where pid=?";
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
    pstmt = conn.prepareStatement(sql);
    pstmt.setInt(1, id);
    rs = pstmt.executeQuery();
    while (rs.next()) {
    sbTreeHTML.append(rs.getString("name"))
    .append("<br>\n");
    if ("N".equals(rs.getString("is_leaf"))) {
    readClientTree(conn, rs.getInt("id"), level);
    }
    }
    } finally {
    DbUtil.close(rs);
    DbUtil.close(pstmt);
    }
    } //递归读取分销商树
    //采用div生成树形结构
    private void readClientTree(Connection conn, int id, int level)
    throws SQLException {
    String sql = "select * from t_client where pid=?";
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
    pstmt = conn.prepareStatement(sql);
    pstmt.setInt(1, id);
    rs = pstmt.executeQuery();
    while (rs.next()) {
    sbTreeHTML.append("<div>");
    sbTreeHTML.append("\n");
    for (int i = 0; i < level; i++) {
    sbTreeHTML.append("<img src=\"../images/white.gif\">");
    sbTreeHTML.append("\n");
    }
    // if ("N".equals(rs.getString("is_leaf"))) {
    if (Constants.NO.equals(rs.getString("is_leaf"))) {
    sbTreeHTML
    .append("<img alt=\"展开\" style=\"cursor:hand;\" onClick=\"display('"
    + rs.getInt("id")
    + "');\" id=\"img"
    + rs.getInt("id")
    + "\" src=\"../images/plus.gif\">");
    sbTreeHTML.append("\n");
    sbTreeHTML.append("<img id=\"im" + rs.getInt("id")
    + "\" src=\"../images/closedfold.gif\">");
    sbTreeHTML.append("\n");
    sbTreeHTML.append("<a href=\"client_node_crud.jsp?id="
    + rs.getInt("id")
    + "\" target=\"clientDispAreaFrame\">"
    + rs.getString("name") + "</a>");
    sbTreeHTML.append("\n");
    sbTreeHTML.append("<div style=\"display:none;\" id=\"div"
    + rs.getInt("id") + "\">");
    sbTreeHTML.append("\n");
    readClientTree(conn, rs.getInt("id"), level + 1);
    sbTreeHTML.append("</div>");
    sbTreeHTML.append("\n");
    } else {
    sbTreeHTML.append("<img src=\"../images/minus.gif\">");
    sbTreeHTML.append("\n");
    sbTreeHTML.append("<img src=\"../images/openfold.gif\">");
    sbTreeHTML.append("\n");
    // if ("Y1".equals(rs.getString("is_client"))) {
    if (Constants.YES.equals(rs.getString("is_client"))) {
    sbTreeHTML.append("<a href=\"client_crud.jsp?id="
    + rs.getInt("id")
    + "\" target=\"clientDispAreaFrame\">"
    + rs.getString("name") + "</a>");
    } else {
    sbTreeHTML.append("<a href=\"client_node_crud.jsp?id="
    + rs.getInt("id")
    + "\" target=\"clientDispAreaFrame\">"
    + rs.getString("name") + "</a>");
    }
    sbTreeHTML.append("\n");
    }
    sbTreeHTML.append("</div>");
    sbTreeHTML.append("\n");
    }
    } finally {
    DbUtil.close(rs);
    DbUtil.close(pstmt);
    }
    }
    }
      

  2.   

    在CSDN上发帖太少……刚才的代码要调整下……但修改不了啊
    刚才的例子我好好修改修改再贴上来。
      

  3.   

    Struts2动态树型从数据库取出 
    后台数据层代码:public TEquipmentTree[] getChildren(String treeNodeId) throws Exception {
      Connection conn = getConnection();
      PreparedStatement smt = conn.prepareStatement("select * from t_equipmentclass where eql_pcode ='"+treeNodeId+"'");
      
      ResultSet rs = smt.executeQuery();
      List<TEquipmentTree> childList = new ArrayList<TEquipmentTree>();
      while (rs.next()) {
       TEquipmentTree TEquipmentTree = new TEquipmentTree();
       TEquipmentTree.setEqlCode(rs.getString("eql_code"));
       TEquipmentTree.setEqlName(rs.getString("eql_name"));
       TEquipmentTree.setEqlPcode(rs.getString("eql_pcode"));
       TEquipmentTree.setEqlLevel(rs.getInt("eql_level"));
       TEquipmentTree.setEqlRe(rs.getString("eql_re"));
       TEquipmentTree.setChildEquipment(getChildren(TEquipmentTree.getEqlCode()));
       childList.add(TEquipmentTree);
      }
      rs.close();
      smt.close();
      conn.close();
      TEquipmentTree[] childResult = new TEquipmentTree[childList.size()];
      childResult = childList.toArray(childResult);
      return childResult;
     }public TEquipmentTree[] getAllTEquipmentTree() throws Exception {
      String sql="select * from T_Equipmentclass where EQL_PCODE='EEW1001'";
      Connection conn = getConnection();
      PreparedStatement smt = conn.prepareStatement(sql);
      ResultSet rs = smt.executeQuery();
      List<TEquipmentTree> TEquipmentTreeList = new ArrayList<TEquipmentTree>();
      while (rs.next()) {
       TEquipmentTree TEquipmentTree = new TEquipmentTree();
       TEquipmentTree.setEqlCode(rs.getString("EQL_CODE"));
       TEquipmentTree.setEqlName(rs.getString("EQL_NAME"));
       TEquipmentTree.setEqlPcode(rs.getString("EQL_PCODE"));
       TEquipmentTree.setEqlLevel(rs.getInt("EQL_LEVEL"));
       TEquipmentTree.setEqlRe(rs.getString("EQL_REMARK"));
       TEquipmentTree.setChildEquipment(getChildren(TEquipmentTree.getEqlCode()));
       TEquipmentTreeList.add(TEquipmentTree);  }
      rs.close();
      smt.close();
      conn.close();
      TEquipmentTree[] TEquipmentTree = new TEquipmentTree[TEquipmentTreeList.size()];
      TEquipmentTree = TEquipmentTreeList.toArray(TEquipmentTree);
      return TEquipmentTree;
     }前台页面:<s:head theme="ajax"/>
    <script type="text/javascript">
    function treeNodeSelected(arg) {
     window.returnValue=arg.source.title+","+arg.source.widgetId;
     window.close();
     //arg.source.widgetId+","
     //window.opener.document.getElementById("eqlCode").value=arg.source.widgetId;
     //alert(arg.source.title);
     //window.opener.document.getElementByName("eqlName").value=arg.source.title;
     //alert("id["+arg.source.widgetId+"], name["+ arg.source.title+ "] selected");
       }
       dojo.addOnLoad(function() {                
          var s = dojo.widget.byId('tree').selector;                
          dojo.event.connect(s, 'select', 'treeNodeSelected');
       });
    </script>
    </head>
    <body>
    <s:form>
     <s:tree id="tree" 
     rootNode="root"
     nodeIdProperty="eqlCode" 
     nodeTitleProperty="eqlName" 
     childCollectionProperty="childEquipment" 
     treeSelectedTopic="treeSelected" 
     theme="ajax" 
     showRootGrid="false">
     </s:tree>
    </s:form>