一个老问题 关于多级的级联菜单--求救 (struts+JSP)急!!!!!!分不够再加!!!

lmcctvjava 2005-03-17 04:05:48
手头上有个四级别连查的任务 都是从数据库取得 同一张tree表上
node_id node_name parent_id
1 ss 0
2 aa 0 1,2是一级彩旦选项
3 22 1 3 ,4,7 2级
4 2323 2
5 we2 3 5,6 3级.....依次类推
6 223 3
7 yy 2

大致的页面
地区: ----------一级
<html:select name="arealist">
</<html:select>
线路: -----------2级
<<html:select name="linelist">
</<html:select>
关口:------------3级
<<html:select name="gatelist">
</<html:select>
变压器:----------4级别
<<html:select name="transformerlist">
</<html:select>
设备号: 选择了变压器后 查出设备号和安装地址显示出来
<<html:text name="trandformer_id"value="">
</<html:text>
安装地址:
<<html:text name="address"value="">
</<html:text>

查找了很多文章 要不就是没注释 要不就是讲解的不清楚 希望哪位高手能详细讲解一下
现在主要是在看塞迪网上的一篇 里面有一部分代码看的似懂非懂

-------------------------------jsp----------------------------
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<html>
<head>
<title>
选择文件类别
</title>
</head>
<body bgcolor="#ffffff">
<h3>
选择文件所属类型
</h3>
<html:errors/>
<table width="500" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><html:form name="articleClassForm" type="entity.ArticleClassForm"
action="selectArticleClassAction.do">
<table width="500" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right">文章大类*</td>
<td>
<html:select property="articleClassID" styleClass="word"
onchange="articleClassFormredirect(this.options.selectedIndex)">
<html:option value="">请选择一个大类</html:option>
<html:optionsCollection name="articleClassForm" property="beanCollection" styleClass="word"/>
</html:select>
</td>
</tr>
<tr>
<td align="right">文章小类*</td>
<td>
<select name="articleSubClassID" Class="word" >
<option value="">请选择一个小类</option>
</select>
<SCRIPT language=JavaScript>
<!--
var 大类长度=document.articleClassForm.articleClassID.options.length
var 小类=new Array(大类长度)
for (i=0; i<大类长度; i++)
小类[i]=new Array()
~~~~~~~~~~~~主要是这里
~~~~~~~~~~~~
<logic:iterate name="articleSubClassList" id="articleClassForm"
scope="request" type="entity.ArticleClassForm">
小类[<bean:write name="articleClassForm"property="subI"/>]
[<bean:write name="articleClassForm"property="subJ"/>]
=new Option("<bean:write name="articleClassForm"property="articleSubClassName"/>"
,"<bean:write name="articleClassForm"property="articleSubClassID"/>")
</logic:iterate>
var articleSubClassTemp=document.articleClassForm.articleSubClassID
function articleClassFormredirect(x){
for (m=articleSubClassTemp.options.length-1;m>0;m--)
//将上次的下拉数据清空
articleSubClassTemp.options[m]=null

for (i=0;i<小类[x].length;i++){
articleSubClassTemp.options[i]=new Option(小类[x][i].text,小类[x][i].value)}

articleSubClassTemp.options[0].selected=true
}
//-->例:select1 和select2
在select1下拉框的onChange事件中加上select2.options[select1.selectedIndex].selected=true,这样第一个下拉框变化了第二个下拉框也变成与第一个下拉框对应的数据。
</SCRIPT>
</td>
</tr>
</table>
</html:form>
</td>
</tr>
</table>
</body>
</html>


...全文
83 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lmcctvjava 2005-03-17
  • 打赏
  • 举报
回复
若大家有相关的成型代码 希望share一下 3Q
在线等
lmcctvjava 2005-03-17
  • 打赏
  • 举报
回复
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~formbean
package entity;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.util.Collection;

public class ArticleClassForm extends ActionForm {
//为select的option做准备
private Collection beanCollection;
private String singleSelect = "";
private String[] beanCollectionSelect = { "" };
private String articleClassID;
private String articleClassName;
private String subI;//子类所在行数
private String subJ;//子类所在列数
private String articleSubClassID;
private String articleSubClassName;

public Collection getBeanCollection(){
return beanCollection;
}

public void setBeanCollection(Collection beanCollection){
this.beanCollection=beanCollection;
}

public String getSingleSelect() {
return (this.singleSelect);
}
public void setSingleSelect(String singleSelect) {
this.singleSelect = singleSelect;
}
public String[] getBeanCollectionSelect() {
return (this.beanCollectionSelect);
}
public void setBeanCollectionSelect(String beanCollectionSelect[]) {
this.beanCollectionSelect = beanCollectionSelect;
}

public String getArticleClassID() {
return articleClassID;
}
public void setArticleClassID(String articleClassID) {
this.articleClassID = articleClassID;
}
public String getArticleClassName() {
return articleClassName;
}
public void setArticleClassName(String articleClassName) {
this.articleClassName = articleClassName;
}

public String getSubI() {
return subI;
}
public void setSubI(String subI) {
this.subI = subI;
}

public String getSubJ() {
return subJ;
}
public void setSubJ(String subJ) {
this.subJ = subJ;
}

public String getArticleSubClassID() {
return articleSubClassID;
}
public void setArticleSubClassID(String articleSubClassID) {
this.articleSubClassID = articleSubClassID;
}

public String getArticleSubClassName() {
return articleSubClassName;
}
public void setArticleSubClassName(String articleSubClassName) {
this.articleSubClassName = articleSubClassName;
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~action

package action;
import entity.*;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import javax.sql.DataSource;
import java.sql.Connection;
import db.ArticleClassDao;
import java.util.Collection;
import java.sql.SQLException;
public class SelectArticleClassAction extends Action {
public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm,
HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
/**@todo: complete the business logic here, this is just a skeleton.*/
ArticleClassForm articleClassForm = (ArticleClassForm) actionForm;
DataSource dataSource;
Connection cnn=null;
ActionErrors errors=new ActionErrors();
try{
dataSource = getDataSource(httpServletRequest,"A");
cnn = dataSource.getConnection();
ArticleClassDao articleClassDao=new ArticleClassDao(cnn);

Collection col=articleClassDao.findInUseForSelect();
articleClassForm.setBeanCollection(col);
httpServletRequest.setAttribute("articleClassList",col);

//处理子类选项
Collection subCol=articleClassDao.findInUseForSubSelect();
httpServletRequest.setAttribute("articleSubClassList",subCol);
return actionMapping.findForward("success");
}
catch(Throwable e){
e.printStackTrace();
//throw new RuntimeException("未能与数据库连接");
ActionError error=new ActionError(e.getMessage());
errors.add(ActionErrors.GLOBAL_ERROR,error);
}
finally{
try{
if(cnn!=null)
cnn.close();
}
catch(SQLException e){
throw new RuntimeException(e.getMessage());
}
}
saveErrors(httpServletRequest,errors);
return actionMapping.findForward("fail");
}
}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~DAO
package db;

import entity.ArticleClassForm;
import db.*;
import java.sql.*;

import java.util.Collection;
import java.util.ArrayList;
import org.apache.struts.util.LabelValueBean;
public class ArticleClassDao {
private Connection con;

public ArticleClassDao(Connection con) {
this.con=con;
}
public Collection findInUseForSelect(){
PreparedStatement ps=null;
ResultSet rs=null;
ArrayList list=new ArrayList();
String sql="select * from articleClass order by articleClassID";
try{
if(con.isClosed()){
throw new IllegalStateException("error.unexpected");
}
ps=con.prepareStatement(sql);
rs=ps.executeQuery();

while(rs.next()){
String value=rs.getString("articleClassID");
String label=rs.getString("articleClassName");
list.add(new LabelValueBean(label,value));
}
return list;
}
catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("error.unexpected");
}
finally{
try{
if(ps!=null)
ps.close();
if(rs!=null)
rs.close();

}
catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("error.unexpected");
}
}
}

public Collection findInUseForSubSelect(){
PreparedStatement ps=null;
ResultSet rs=null;
PreparedStatement psSub=null;
ResultSet rsSub=null;
int i=0;//大类记数器
int j=0;//小类记数器
String classID="";
String subClassID="";
String subClassName="";

ArrayList list=new ArrayList();
ArticleClassForm articleClassForm;


String sql="select * from articleClass order by articleClassID";
try{
if(con.isClosed()){
throw new IllegalStateException("error.unexpected");
}
ps=con.prepareStatement(sql);
rs=ps.executeQuery();

while(rs.next()){
i++;
classID=rs.getString("articleClassID");
String sqlSub="select * from articleSubClass where articleClassID=?
order by articleSubClassID";
psSub=con.prepareStatement(sqlSub);
psSub.setString(1,classID);
rsSub=psSub.executeQuery();

articleClassForm=new ArticleClassForm();
articleClassForm.setSubI(""+i);
articleClassForm.setSubJ(""+j);
articleClassForm.setArticleSubClassID("请输入一个小类");
articleClassForm.setArticleSubClassName("请输入一个小类");
list.add(articleClassForm);

while(rsSub.next()){
subClassID=rsSub.getString("articleSubClassID");
subClassName=rsSub.getString("articleSubClassName");
j++;
//optionStr="articleSubClassGroup[" + i + "][" + j + "]=
new Option('"+ subClassName +"','"+ subClassID+ "')";
articleClassForm=new ArticleClassForm();
articleClassForm.setSubI(""j+i);
articleClassForm.setSubJ(""+);
articleClassForm.setArticleSubClassID(subClassID);
articleClassForm.setArticleSubClassName(subClassName);
list.add(articleClassForm);
}

j=0;
}
return list;
}
catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("error.unexpected");
}
finally{
try{
if(ps!=null)
ps.close();
if(rs!=null)
rs.close();

}
catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("error.unexpected");
}
}
}
}


关键地方有2个 一个是怎么样去赋值
我的理解是程序中对与每一级别的每个记录,建立一个变量代表这个记录是第几个 例如i和j分别代码第一级的和第二级的记录序号 javascript中 的那个logic看的很模糊

第二个地方是 点了一个之后 onchange触发的事件流程
希望高手帮忙!

62,614

社区成员

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

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