求一个jsp+ajax的二级联动无刷新菜单

liyingfei 2007-11-01 07:25:10
类似这个
http://www.10090.com/demo/hpmenu/hpmenu.html

二级联动就可以了

两个字段都是动态从数据库中读取

郁闷了好几天了,帮帮忙,谢谢!
...全文
3285 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
gchichafengyun 2012-05-10
  • 打赏
  • 举报
回复
好贴!mark!
wenshiquan123 2011-12-22
  • 打赏
  • 举报
回复
太好了,收藏
casolina 2011-07-25
  • 打赏
  • 举报
回复
收藏中。。。。
duoluo_tian_shi 2008-11-26
  • 打赏
  • 举报
回复
就是我想要的效果!
hongseyouyang 2008-05-09
  • 打赏
  • 举报
回复
好东西... 来晚了
cnboss 2007-11-07
  • 打赏
  • 举报
回复
very good.
dingdangxiaoma 2007-11-07
  • 打赏
  • 举报
回复
顶了啊,这么多人啊,好好的啊.!
leer168 2007-11-05
  • 打赏
  • 举报
回复
好帖子!!!!
seething 2007-11-05
  • 打赏
  • 举报
回复
关注!
skyell 2007-11-05
  • 打赏
  • 举报
回复
学习~
marky2007 2007-11-05
  • 打赏
  • 举报
回复
http://sourceforge.net/projects/xapps/ 发现一个好的平台,推荐给大家,包括内容很多,比如:工作流,动态表单,....好强大 ,是JAVA编写的,是一个中国的开源工程,上去顶一下了.
jjjj2005jjjj 2007-11-03
  • 打赏
  • 举报
回复
我的老师给了一个我,不过没有带来,呵呵
jxjjljf 2007-11-03
  • 打赏
  • 举报
回复
ding
javaboy2006 2007-11-03
  • 打赏
  • 举报
回复
思路:大类select控件的onchange事件将自身的大类id传递给javascript函数,然后js函数利用ajax查询数据库得到该大类所属小类信息(我这里返回的是一段xml),并显示到另一个select控件中即可。实现起来比树形菜单要简单。

-------------页面代码片段----------------

<tr>
<td>
<b>节目类型</b>
</td>
<td>
<select name="bigTypeSelect" onchange="getSmallType(this.value);">
<option value="-1">
未选择
</option>
<c:forEach items="${bigTypeList}" var="temp">
<option value="${temp.typeId}">
${temp.typeName}
</option>
</c:forEach>
</select>
 
<select name="typeId">
<option value="-1">
未选择
</option>
</select>
</td>
</tr>



<script type="text/javascript">
//创建XMLHttpRequest对象
function createXMLHttpRequest()
{
//Mozilla 浏览器
if(window.XMLHttpRequest)
{
XMLHttpReq = new XMLHttpRequest();
}
// IE浏览器
else if (window.ActiveXObject)
{
try
{
XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
}

//发送请求函数
function getSmallType(bigTypeId)
{
if(bigTypeId == -1)
{
var typeId = document.forms[0].typeId;
//清空select所有option选项
typeId.options.length = 0;
var option = document.createElement("option");
option.text = "未选择";
option.value = -1;
typeId.options.add(option);
return false;
}

createXMLHttpRequest();
XMLHttpReq.onreadystatechange = getFinsh;

var url = "getsmalltype.do?bigtypeid="+bigTypeId;
XMLHttpReq.open("post",url , true);
XMLHttpReq.send(null);
}

//处理返回响应函数
function getFinsh()
{
if (XMLHttpReq.readyState == 4)
{
if (XMLHttpReq.status == 200)
{
if(window.ActiveXObject)
{
var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
}
else
{
if(document.implementation && document.implementation.createDocument)
{
var xmlDom=document.implementation.createDocument("","doc",null);
}
}
xmlDom.async = false;
xmlDom.loadXML(XMLHttpReq.responseText);

var typeId = document.forms[0].typeId;
//清空select所有option选项
typeId.options.length = 0;

var smallTypes = xmlDom.getElementsByTagName("smalltypes/smalltype");
//包含子类信息
if(smallTypes.length != 0)
{
var option = document.createElement("option");
option.text = "未选择";
option.value = -1;
typeId.options.add(option);

for(var i = 0;i < smallTypes.length;i ++)
{
//子类ID
var typeIdText = smallTypes[i].firstChild.text;
//alert(typeIdText);

//子类名
var typeNameText = smallTypes[i].lastChild.text;
//alert(typeNameText);

//添加子类信息到下拉列表
var option = document.createElement("option");
option.text = typeNameText;
option.value = typeIdText;
typeId.options.add(option);
}
}
else
{
var option = document.createElement("option");
option.text = "无子类";
option.value = document.forms[0].bigTypeSelect.options(document.forms[0].bigTypeSelect.selectedIndex).value;
typeId.options.add(option);
}
}
else
{
alert("Error data:\n"+ XMLHttpReq.statusText);
}
}
}
</script>



//获得小类信息XML
public String getSmallTypeByBigTypeIdXml(String configFilePath,
String bigTypeId) {
File file = new File(configFilePath);
Configuration conf = new Configuration().configure(file);
SessionFactory sessionFactory = null;
sessionFactory = conf.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session
.createQuery("from TypeInfo where parentId = :parentid");
query.setInteger("parentid", Integer.parseInt(bigTypeId));
List list = query.list();
session.close();
StringBuffer xmlSb = new StringBuffer("<smalltypes>");
for (int i = 0; i < list.size(); i++) {
TypeInfo typeInfo = (TypeInfo) list.get(i);
xmlSb.append("<smalltype><typeid>" + typeInfo.getTypeId()
+ "</typeid><typename>" + typeInfo.getTypeName()
+ "</typename></smalltype>");
}
xmlSb.append("</smalltypes>");
return xmlSb.toString();
}

iiitom 2007-11-03
  • 打赏
  • 举报
回复
谈谈思路比较好。

这种东西一段时间来做的巨多。

如果你的菜单放在一个表内,那么请加一个标识,加一个parent字段,区分子菜单和父菜单。SQL方面你也更方便,select * from menu where parent =?

AJAX , 既然你是用这个东西,那相信用AJAX 的方式与后台沟通楼主是应该清楚的。

建一个Servlet,调用你的逻辑方法返回值(list),迭代list,插入到目标XML中,返回XML

用 xmlHttpRequest 对象返回XML , 解释XML 循环读出 Servlet 返回的 xml 子节点,逐一添加到子菜单的<Select> 的 中去 (<option>)。

sijin 2007-11-03
  • 打赏
  • 举报
回复
TTTTTTTTTTTTTTTTTTTTTT
dsoft002163 2007-11-02
  • 打赏
  • 举报
回复
好回答!!! 顶!

问一下 数据库表设计是??
liyingfei 2007-11-02
  • 打赏
  • 举报
回复
昨天晚上已经搞定
自己参考书籍写了一个出来
谢谢大家
结帖 给分
yangjping 2007-11-02
  • 打赏
  • 举报
回复
我有,加我的QQ21020540 我发文件给你.
ferreousbox 2007-11-02
  • 打赏
  • 举报
回复
呵呵,可以参看下我的文章~~
http://j2ee.blog.sohu.com/68011726.html
加载更多回复(16)

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧