数据库中的一张表是树形结构,然后把所有节点在页面上以textbox来显示出来,然后希望显中某级的时候某级及其下所有子节点全部被选中,我现在的问题是假设我有四级,第二级有3个节点,其下各有N个节点,然后我点中第二级的其中一个节点,结果发现第二级其他两个节点没有被选中,但是这两个没有点中的节点的下面的所有子节点居然全是选中状态,大家以为可能是什么原因导致的?我一直在弄可能有点思维定势,希望大家畅所欲言,给点启发,谢谢
解决方案 »
- 请教高手帮忙!!
- mysql+hql+limit问题
- byte类型怎样转换成blob类型?
- httpclient 上传文件和其他参数,使用MultipartRequest类接收文件和字段时,文件打不开,多2字节。
- 初学java,请问有什么比较好的书推荐一下吗?
- 自定义JSP标签的问题
- 我怎么觉得Servlet没有JavaBean的优点突出,所以学得没什么劲!请指教
- 请大家帮忙解释一下这是什么异常?????
- 有人做过通过程序自动修改新浪微博、腾讯微博、网易微博、搜狐微博的密码吗
- 小白linux项目部署遇问题
- 关于后台左面树形菜单实现问题!
- struts1.2 如何通过 request.setAttribute() 设值给action
贴代码上来看看。
public class DirectoryView { private Log log = LogFactory.getLog(DirectoryView.class);
private Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
private StringBuffer menuview = new StringBuffer();
private Directory rootdirectory = null;
private int layer = 1;
private static String tableName = "circuit";
private static String id_field = "circuit_id";
private static String parent_id_field = "p_id";
private static String where = null;
private String contextPath;
private int j=0,k=0;
public DirectoryView(String id){
rootdirectory = new Directory(tableName, id_field, parent_id_field, where).find(id);
}
public String listTree(String contextPath){
if(rootdirectory==null)
return "";
this.contextPath = contextPath;
synchronized(map){
layer = StringUtil.toInt(rootdirectory.getValue("grade"));
layer = layer<=0?1:layer;
//menuview.append("<div id=\"right_scrolling\">");
listTree1(rootdirectory, 0,1,1);
//menuview.append("</div>");
log.info("成功获取树形列表"+rootdirectory.getAllDirectory().size());
System.out.println(menuview);
return menuview.toString();
}
}
@SuppressWarnings("unchecked")
private synchronized void listTree1(Directory directory,int index,int size,int layer){
String circuit_id = directory.getValue("circuit_id");
map.put(layer, (index==size-1));
j=1;
printDirectory(directory, index,size,layer);
List children = directory.getAllDirectory();//s(module_code);
size = children.size();
if(size == 0)
return;
menuview.append("<div id='childoftable" + circuit_id + "' class='tbg1' width='100%' align=center style='border:hidden;display:"+(layer==1?"":"none")+";'>\n");
for(int i=0; i<size;i++ ){
j++;
Directory dir = (Directory)children.get(i);
listTree1(dir,i,size,layer+1);
}
menuview.append("</div>\n");
}
private synchronized void printDirectory(Directory directory,int index,int size,int layer){
String circuit_id = directory.getValue("circuit_id");
if(circuit_id==null)
return;
String circuit_name = directory.getValue("circuit_name");
int grade = Integer.parseInt(directory.getValue("grade"));
String tableid = "table" + circuit_id;
menuview.append(" <table style='border:hidden; solid black;border-collapse:collapse; ' class='tbg1' cellspacing=0 cellpadding=0 width='100%' align=center onMouseOver=\"this.className='tbg1sel'\" onMouseOut=\"this.className='tbg1'\" border=0>\n");
menuview.append(" <tr>\n");
menuview.append(" <td width='85%' height='13' align=left nowrap style='border:1px;'>\n");
for (int i=this.layer;i<layer; i++) {
boolean b = false;
for (int j=i;j<layer; j++) {
Boolean bol = map.get(j);
if(bol!=null&&!bol&&i==j){
menuview.append(" <img src="+contextPath+"/images/i_plus-2.gif align='absmiddle'/>\n");
b = true;
break;
}
}
if(!b){
menuview.append(" ");
}
}
menuview.append("\n");
if(rootdirectory.getValue(id_field).equals(circuit_id)){//如果是根目录
menuview.append(" <img onClick=\"ShowChild(this, '"+tableid+"')\" src='"+contextPath+"/images/i_puls-root.gif' align='absmiddle'/>\n");
}else{
/*div显示
if(index==size-1){//如果是最后一个
if(directory.isNextDirectory()){//如果有下级目录
menuview.append(" <img onClick=\"ShowChild(this, '" + tableid + "')\" src='"+contextPath+"/images/i_plus2-2.gif' align='absmiddle'>\n");
}else {
menuview.append(" <img src='"+contextPath+"/images/i_plus-2-3.gif' align='absmiddle'>\n");
}
}else {//如果不是最后一个
if(directory.isNextDirectory()){//如果有下级目录
menuview.append(" <img onClick=\"ShowChild(this, '" + tableid + "')\" id='img"+tableid+"' src='"+contextPath+"/images/i_plus2-1.gif' align='absmiddle'>\n");
}else {
menuview.append(" <img src='"+contextPath+"/images/i_plus-2-2.gif' align='absmiddle'>\n");
}
}*/
//div隐藏
if(index==size-1){//如果是最后一个
if(directory.isNextDirectory()){//如果有下级目录
menuview.append(" <img onClick=\"ShowChild(this, '" + tableid + "')\" src='"+contextPath+"/images/i_plus-1-1.gif' align='absmiddle'/>\n");
}else {
menuview.append(" <img src='"+contextPath+"/images/i_plus-2-3.gif' align='absmiddle'/>\n");
}
}else {//如果不是最后一个
if(directory.isNextDirectory()){//如果有下级目录
menuview.append(" <img onClick=\"ShowChild(this, '" + tableid + "')\" id='img"+tableid+"' src='"+contextPath+"/images/i_plus-1.gif' align='absmiddle'/>\n");
}else {
menuview.append(" <img src='"+contextPath+"/images/i_plus-2-2.gif' align='absmiddle'/>\n");
}
}
}
k++;
menuview.append(" <input type='checkbox' name='circuit_id' id='layer"+grade+(k)+"' value='"+circuit_id+"' onclick=\"selectCircuit_id("+(grade)+","+(k)+",this.checked);\"/>"+circuit_name);
menuview.append(" </td>\n");
menuview.append(" </tr>\n");
menuview.append(" </table>\n");
}
}