Code Bye

java循环遍历二叉树在页面显示三级菜单结构

我的数据库如下:
create table LARGEMERCHANDISE
(
id  number  primary  key,  //商品ID  自增长
sku  nvarchar(255)   not  null,  //商品编号
name nvarchar(255)   not  null,  //商品名称
unit  nvarchar(255)   not  null,  //商品规格
code nvarchar(255)   not  null,  //商品条码
acoding nvarchar(255)   not  null,   //一级类编码(大类)
bcoding nvarchar(255)   not  null,   //二级类编码(中类)
cscoding nvarchar(255)   not  null,   //三级类编码(小类)
)
我要得到的效果就是全部商品分类,一级类下面显示子类(二级类) ,二级类又显示子类(三级类)
具体要怎么去编码实现啊,现在一直都没有解决,望指导!
我用的是SSH三大框架,Action里面要怎么写,然后在JSP页面显示三级菜单???


40分
1、把从数据库里取出来的数据组装成这样的形式

Bean(ID NAME PID(也可以包含其他的属性))
对象的集合
2、然后把这个对象的集合返回成一个JSON给前台
3、前台用Ztree实现(http://www.ztree.me/v3/main.php#_zTreeInfo

有个疑问
举个例子
如果是一级商品
比如
ID 1
sku SP0001
name 汽车
unit QC001
code TM001
acoding FIRST0001
bcoding 这个不为null?填写什么?空串
cscoding 这个不为null?填写什么?空串

我数据库中是这样的插入数据后:
ID          sku                name           unit             code          一级   二级         三级
2 D000001 豆腐卤西瓜 6kg        6920343247  01    0101   010101   
3 D000002 西瓜卤豆腐 500g      6903423424  02    0202   020101   

40分
引用 2 楼 u014036036 的回复:

我数据库中是这样的插入数据后:
ID          sku                name           unit             code          一级   二级         三级
2 D000001 豆腐卤西瓜 6kg        6920343247  01    0101   010101   
3 D000002 西瓜卤豆腐 500g      6903423424  02    0202   020101   

那这样说吧
D000001(豆腐卤西瓜)表示的是几级商品?
或者换种说法(列三条数据)
1、先列出一个一级商品
2、然后再列出这个一级商品下的二级商品
3、最后再列出这个一级商品下的二级商品下的三级商品
看看数据是啥样

          一级商品                                                          三级商品
        1  田园时蔬                                    3 生态蔬菜    净菜类  叶菜类
2生态蔬菜    菌菇(二级商品)         菌菇           精品菌菇   野生菇
总体是这样的
田园时蔬 下面 包含 二级商品生态蔬菜    菌菇 ,生态蔬菜下面包括净菜类  叶菜类(三级商品),菌菇下面包括精品菌菇   野生菇(三级商品)
一级      二级       三级
01       0101    010101
02       0202     020101
我这里一级代表某个商品,二级 三级也是,到时候我在页面手动给
那里在前台是显示成这样吗?
田园时蔬
	生态蔬菜
		净菜类
		叶菜类
	菌菇
		精品菌菇
		野生菇
是的啊,我在dao里面的方法不知道怎么写啊
田园时蔬
    生态蔬菜
        净菜类
        叶菜类
    菌菇
        精品菌菇
        野生菇
就是你这样的效果!
我现在用递归重复调用某个方法在页面显示可以吗???具体怎么去写???
1、声明一个类
class TreePojo{
	private String id;
	private String name;
	private String pid;
}

2、然后再组成一个List

List<TreePojo> list = new ArrayList<TreePojo>();

TreePojo pojo = new TreePojo("01","田园时蔬","0");
TreePojo pojo = new TreePojo("0101","生态蔬菜","01");
TreePojo pojo = new TreePojo("010101","净菜类","0101");
TreePojo pojo = new TreePojo("010102","叶菜类","0101");

3、返回一个JSON字符串给前台(把这个List转成一个JSON)

不用JSON可以有其他的办法吗???
引用 12 楼 u014036036 的回复:

不用JSON可以有其他的办法吗???

最好用json,为什么不想用json,如果你前台想用ztree,最好组装成json的数据

转json很方便的,比如fastjson、gson这些开源的包都挺好用的,struts本生也支持json

楼主,这两天我正好也在做三级菜单联动的效果,也是SSH框架,我用的是select实现的,通过获取上一级的select 的change事件,用ajax加载这一级的列表。这是我实现的代码,希望能对你有所帮助
<script>
	$(document).ready(function(){
		 $("#sel_Province").change(function(){
		 	 var a = $("select[id=""sel_Province""]").val();
		 	$("#pro").val($("#sel_Province").find("option:selected").text()); 
	   		$("#proid").val($("select[id=""sel_Province""]").val()); 
	   		$("#sel_City").empty();
			$.ajax({
				url: ""<%=basePath%>areaAjax/getCity.do"",
				data: "procode="+$("#sel_Province").val(),
				type: ""get"",
				dataType:""json"",
				error: function(data)
				{
					alert("加载json 文件出错!");
				},
				success: function(data)
				{
					//data = $.parseJSON(data);
				    for (var one in data)
				    {
						var name = data[one].name;
						var code = data[one].code;
						//alert(name+code);
						$("#sel_City").append("<option value="+code+">"+name+"</option>");
				    }
				},
			});
	   });
	   $("#sel_City").change(function(){
	   		$("#city").val($("#sel_City").find("option:selected").text()); 
	   		$("#cityid").val($("select[id=""sel_City""]").val()); 
	   		if($("#cityid").val()==3607){
			$("#areaType").val(""0"");
			}
			else if($("#proid").val()==36){
				$("#areaType").val(""1"");
			}
			else{
				$("#areaType").val(""2"");
			}
			$("#sel_County").empty();
			$.ajax({
				url: ""<%=basePath%>areaAjax/getArea.do"",
				data: "citycode="+$("#sel_City").val(),
				type: ""get"",
				dataType:""json"",
				error: function(data)
				{
					alert("加载json 文件出错!");
				},
				success: function(data)
				{
				    for (var one in data)
				    {
						var name = data[one].name;
						var code = data[one].code;
						$("#sel_County").append("<option value="+code+">"+name+"</option>");
				    }
				},
			});
	   });
	   $("#sel_County").change(function(){
	   		$("#country").val($("#sel_County").find("option:selected").text()); 
	   		$("#countryid").val($("select[id=""sel_County""]").val()); 
	   });
	});
</script>
<span style="color: red;">*</span>省
			<select id="sel_Province" style="width:80px" name="sel_Province">
				<option value="" selected="selected">请选择</option>
				<c:forEach items="${proList}" var="list" varStatus="status">
				 		<option value="${list.code}">${list.name }</option>
				</c:forEach>
			</select>
			<span style="color: red;">*</span>市
			<select id="sel_City" style="width:80px" name="sel_City">
				<option value="" selected="selected">请选择</option>
			</select>
			<span style="color: red;">*</span>县/区
			<select id="sel_County" style="width:80px" name="sel_County">
				<option value="" selected="selected">请选择</option>
			</select>  

ajax加载的list的方法在xml中的配置

<!--获取城市地区列表 -->
	<package name="areaAjax" namespace="/areaAjax" extends="json-default">
		<action name="getCity" class="你加载选项的Action" method="CityList">
			<result name="success" type="json">
				<param name="root">listJson</param>
			</result>
		</action>

		<action name="getArea" class="你加载选项的Action" method="AreaList">
			<result name="success" type="json">
				<param name="root">listJson</param>
			</result>
		</action>
	</package>

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java循环遍历二叉树在页面显示三级菜单结构