用javascript每次动态去取值来填充select 就行了
解决方案 »
- 获得的系统时间和打印出来的不一样?
- 网站发布的问题
- eclipse+tomcat+lomboz 如何写jsp
- 怎么将JSP页面的数据导入到WORD中???急啊急!在线等!
- <与<
- 数据连接慢,严重问题
- jsp中如何声明静态Connectin 和 Statement?
- 在eclipse中开发jsp程序的中文问题!!
- 恶心!东东树是谁,东东树的妹妹是谁......
- 挺怪的!!好象是if和else的错误!!
- 读取xml问题
- onChange="if( options[selectedIndex].value!='')window.location='index.jsp?BM='options[selectedIndex].value''"?
将数据库读出来的数据按类别排好后,放到javascript的数组变量中,然后就动态设置和删除select里面的值
搜索思路如下:
递归(深度搜索+广度搜索)
算法:
1、搜索当前节点的下一级子节点;
2、对所有子节点按1的算法递归,直至当前节点无下一级子节点。
递归算法较简单,这里不再赘述。至于生成三级联动菜单可以给你一个例子
import com.netutel.ubisp.acceptarea.value.*;
import com.netutel.ubisp.acceptarea.dao.*;
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.sql.*;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.JspWriter;
import java.io.IOException;/**
* <p>Title: 打印脚本</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author YuanQi
* @version 1.0
*/
public class WriteScript extends TagSupport
{
private String menuStr = "";
private String areaId = "";
private void setMenuStr(String aValue)
{
menuStr = aValue;
}
private String getMenuStr()
{
return menuStr;
}
public void setAreaId(String aValue)
{
areaId = aValue;
}
public String getAreaId()
{
return areaId;
}
public int doStartTag()
{
try
{
JspWriter out = pageContext.getOut();
this.getAssociateMenu();
out.println(this.getMenuStr());
}
catch(IOException e)
{
e.printStackTrace();
}
catch(Exception ex)
{}
return (SKIP_BODY);
}
public void getAssociateMenu() throws Exception
{
try
{
StringBuffer sb = new StringBuffer();
AcceptAreaDAO qeryDao = new AcceptAreaDAO();
Collection countyList = new ArrayList();
countyList = qeryDao.queryCounty(this.getAreaId());
if(countyList!=null&&countyList.size()>0)
{
int i=0;
sb.append("<script language='JavaScript'>\n<!--\n");
sb.append("selector = [ \"countyCode\", \"citiesCode\", \"acceptArea\" ];\n");
sb.append("menu = [\n");
sb.append("\"所有县\",\"-1\",\n[\n");
sb.append("\"所有营销中心\",\"-1\",\n[\n\"所有营业点\",\"-1\",null\n]\n],\n");
Iterator ir = countyList.iterator();
while(ir.hasNext())
{
Collection acceptCenterList = new ArrayList();
AcceptAreaValueBean tmpValue = (AcceptAreaValueBean)ir.next();
sb.append("\""+tmpValue.getCountyDesc()+"\",\""+tmpValue.getCountyKey()+"\",\n[\n");
sb.append("\"所有营销中心\",\"-1\",\n[\n\"所有营业点\",\"-1\",null\n],\n");
acceptCenterList = qeryDao.queryAcceptCenter(tmpValue.getCountyKey(),this.getAreaId());
if(acceptCenterList!=null&&acceptCenterList.size()>0)
{
int k = 0;
Iterator it = acceptCenterList.iterator();
while(it.hasNext())
{
Collection acceptAreaList = new ArrayList();
AcceptAreaValueBean tmpValue2 = (AcceptAreaValueBean)it.next();
sb.append("\""+tmpValue2.getAcceptCenterDesc()+"\",\""+tmpValue2.getAcceptCenterKey()+"\",\n[\n");
sb.append("\"所有营业点\",\"-1\",null,\n");
acceptAreaList = qeryDao.queryAcceptArea(tmpValue2.getAcceptCenterKey());
if(acceptAreaList!=null&&acceptAreaList.size()>0)
{
int j=0;
Iterator ia = acceptAreaList.iterator();
while(ia.hasNext())
{
AcceptAreaValueBean tmpValue3 = (AcceptAreaValueBean)ia.next();
if(j==acceptAreaList.size()-1)
sb.append("\""+tmpValue3.getAcceptAreaDesc()+"\",\""+tmpValue3.getAcceptAreaKey()+"\",null\n");
else
sb.append("\""+tmpValue3.getAcceptAreaDesc()+"\",\""+tmpValue3.getAcceptAreaKey()+"\",null,\n");
j++;
}
}
if(k==acceptCenterList.size()-1)
sb.append("]\n");
else
sb.append("],\n");
k++;
}
}
if(i==countyList.size()-1)
sb.append("]\n");
else
sb.append("],\n");
i++;
}
sb.append("];\n\n");
sb.append("function wizz(level)\n");
sb.append("{\nif( level == 0 )\n");
sb.append("a = menu;\nelse\n{\n");
sb.append("str = \"menu\";\nfor( i=0; i<level; i++ )\n");
sb.append("str += \"[\" + (document.all[selector[i]].selectedIndex * 3 + 2) + \"]\";\n");
sb.append("a = eval(str);\n}\n");
sb.append("if( a == null ) return;\n");
sb.append("s = document.all[selector[level]];\n");
sb.append("i = s.length;\n");
sb.append("while( i > 0 ) s.options[--i] = null;\n");
sb.append("while( i < Math.floor(a.length/3) )\n");
sb.append("s.options[i] = Option( a[i*3], a[i++*3+1] );\n");
sb.append("s.onchange = Function(\"wizz(\" + (level+1) + \")\");\n");
sb.append("wizz(level+1);\n}\nwizz(0);\n");
sb.append("//-->\n</script>\n");
}
this.setMenuStr(sb.toString());
//System.out.println(this.getMenuStr());
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
<html>
<title>关联菜单测试</title>
<body>
<SELECT NAME="s1"></SELECT>
<SELECT NAME="s2"></SELECT>
<SELECT NAME="s3"></SELECT>
<SELECT NAME="s4"></SELECT>
<script language="JavaScript">
<!--
//选择框的名字
selector = [ "s1", "s2", "s3", "s4" ];
//选择项: "名字", "值", 子选择
menu = [
"郑州","1",
[
"所有县","-1",
[
"所有营销中心","-1",
[
"所有营业点","-1",null
]
],
"新密","1",
[
"所有营销中心","-1",
[
"所有营业点","-1",null
],
"新密营销中心1","1",
[
"所有营业点","-1",null,
"营业点1a","1",null,
"营业点1b","2",null
],
"新密营销中心2","2",
[
"所有营业点","-1",null,
"营业点1c","1",null,
"营业点1d","2",null
],
"新密营销中心3","2",
[
"所有营业点","-1",null,
"营业点1e","1",null,
"营业点1f","2",null
]
],
"登封","2",
[
"所有营销中心","-1",
[
"所有营业点","-1",null
],
"登封营销中心1","1",
[
"所有营业点","-1",null,
"营业点1g","1",null,
"营业点1h","2",null
],
"登封营销中心2","2",
[
"所有营业点","-1",null,
"营业点1i","1",null,
"营业点1j","2",null
],
"登封营销中心3","2",
[
"所有营业点","-1",null,
"营业点1k","1",null,
"营业点1l","2",null
]
]
],
"洛阳","2",
[
"所有县","-1",
[
"所有营销中心","-1",
[
"所有营业点","-1",null
]
],
"洛阳县1","1",
[
"所有营销中心","-1",
[
"所有营业点","-1",null
],
"洛阳县1营销中心1","1",
[
"所有营业点","-1",null,
"营业点1a","1",null,
"营业点1b","2",null
],
"洛阳县1营销中心2","2",
[
"所有营业点","-1",null,
"营业点1c","1",null,
"营业点1d","2",null
],
"洛阳县1营销中心3","2",
[
"所有营业点","-1",null,
"营业点1e","1",null,
"营业点1f","2",null
]
],
"洛阳县2","2",
[
"所有营销中心","-1",
[
"所有营业点","-1",null
],
"洛阳县2营销中心1","1",
[
"所有营业点","-1",null,
"营业点1g","1",null,
"营业点1h","2",null
],
"洛阳县2营销中心2","2",
[
"所有营业点","-1",null,
"营业点1i","1",null,
"营业点1j","2",null
],
"洛阳县2营销中心3","2",
[
"所有营业点","-1",null,
"营业点1k","1",null,
"营业点1l","2",null
]
]
]
];
function wizz(level)
{
if( level == 0 )
a = menu;
else
{
str = "menu";
for( i=0; i<level; i++ )
str += "[" + (document.all[selector[i]].selectedIndex * 3 + 2) + "]";
a = eval(str);
}
if( a == null ) return;
s = document.all[selector[level]];
i = s.length;
while( i > 0 ) s.options[--i] = null;
while( i < Math.floor(a.length/3) )
s.options[i] = Option( a[i*3], a[i++*3+1] );
s.onchange = Function("wizz(" + (level+1) + ")");
wizz(level+1);
}
wizz(0);
//-->
</script>
</body>
</html>
写成自定义tag只是为了在页面上使用方便,无所谓怎样实现。