在DRP開發中,遇見這樣一個需求:地區分區,先分為大區,大區下有省,省下有城市,需要在模型中組裝一個樹結構,然後顯示到jsp中,以下是一個實現的方法。
ClientTreeReader
/** * 遞迴讀取分銷商樹 * * 第四步:採用div產生樹形結構 * @param conn 串連 * @param id * @param level 層次 */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);}}
JSP 顯示
<td valign="top" nowrap="nowrap"> <%=ClientManager.getInstance().getClientTreeHTMLString() %></td>
JS控制
function display(id) { eval("var div=div"+id); eval("var img=img"+id); eval("var im=im"+id); div.style.display=div.style.display=="block"?"none":"block"; img.src=div.style.display=="block"?"../images/minus.gif":"../images/plus.gif"; im.src=div.style.display=="block"?"../images/openfold.gif":"../images/closedfold.gif"; img.alt=div.style.display=="block"?"關閉":"展開";}
顯示結果
可以看到使用的Model1開發,這種方法雖然可以實現需求,但是業務處理和其他檔案比片等耦合很高,如何降低這些耦合還需要再進行處理。
更多DRP系列部落格,其訪問《DRP項目總結》。