一般的,如果只有二级级连,那么就在第一个的 onchange() 事件中,触发一个行为,把这个请求提交一次,在后台,根据输入的条件,查询出来第二个菜单的内容。

解决方案 »

  1.   

    这个可以使用js做,可以参考下面的例子:
    http://jfish.blog.ccidnet.com/blog/ccid/do_showone/tid_18378.html
      

  2.   

    我的级联标签时通过js实现的,只不过数据时通过java查询出来的package org.caexpo.common.tag;import static org.caexpo.common.hibernate.HibernateSessionFactory.closeSession;
    import static org.caexpo.common.hibernate.HibernateSessionFactory.currentSession;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Set;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspWriter;
    import javax.servlet.jsp.tagext.TagSupport;import org.apache.log4j.Logger;
    import org.caexpo.nanbo.model.TCountry;
    import org.caexpo.nanbo.model.TProvince;
    import org.hibernate.Query;
    import org.hibernate.Session;
    public class CPTag extends TagSupport
    {
        private String param1;
        private String param2;
        private String form;
        private static Logger log = Logger.getLogger(CPTag.class.getName());    public int doStartTag() throws JspException
        {        
           
            HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
            String szCID = (String)request.getAttribute(param1); 
            String szPID = (String)request.getAttribute(param2);     
            
            try
            {   
                JspWriter out = pageContext.getOut();
                //jspwriter是一个隐含对象,用于向jsp网页输出内容。输出的目标由
                // pagecontext.getout提供
                out.print(writeC(szCID,szPID).toString()); //向jsp网页上下文输出
            }
            catch (IOException ioException)
            {
                throw new JspException(ioException.getMessage());
            }        
            //catch
            return SKIP_BODY;
        }    private StringBuffer writeC(String szCID, String szPID)
        {
            TProvince province = null;
            TCountry country = null;
            Set set = null;
            
            Session session =currentSession();                Query query =session.createQuery("from TCountry as a order by a.countryid");        
            List listC =query.list();
            
            closeSession();
            
            StringBuffer sb = new StringBuffer();
            
            sb.append("<table border='0'>\n");
            sb.append("<tr>\n");
            
            sb.append("<td>\n");
            sb.append("<select name=\""+param1+"\" id=\""+param1+"\" style=\"width:150\" onChange=\"redirect(this.options.selectedIndex)\" >\n");
            sb.append("<option value=\"0\">--请选择--</option>\n");
            if(listC != null)
            {
                for(Object c : listC)
                {  
                 country = (TCountry)c;
                 if(szCID != null && !szCID.trim().equals("0") && szCID.trim().equals(Long.toString(country.getCountryid()).trim()))
                 {
                 sb.append("<option value=\""+((TCountry)c).getCountryid()+"\" selected>"+((TCountry)c).getCountryname()+"</option>\n");
                 }
                 else
                 {
                 sb.append("<option value=\""+((TCountry)c).getCountryid()+"\">"+((TCountry)c).getCountryname()+"</option>\n");
                 }
                }
            }
            sb.append("</select> \n"); 
            sb.append("</td>\n");
            
            sb.append("<td>\n");
            sb.append("<select name=\""+param2+"\" id=\""+param2+"\" style=\"width:100;display:none\">\n"); 
         sb.append("<option value=\"0\">--请选择省份--</option>\n");
       
            if(szCID != null && !szCID.equals("0") && szPID != null && !szPID.equals("0"))
         {
                for(int i = 0; i < listC.size(); i++)
                {
                 country = (TCountry)listC.get(i);             
                 if(Long.toString(country.getCountryid()).trim().equals(szCID.trim()))
                 {
                 set = ((TCountry)listC.get(i)).getProvinceSet();
                 for(Iterator it = set.iterator(); it.hasNext();)
                 {
                 province = (TProvince)it.next();
                 if(Long.toString(province.getProvinceid()).trim().equals(szPID.trim()))
                 {
                 sb.append("<option value=\""+province.getProvinceid()+"\" selected>"+province.getProvincename()+"</option>\n");
                 }
                 else
                 {
                 sb.append("<option value=\""+province.getProvinceid()+"\">"+province.getProvincename()+"</option>\n");
                 }
                 }
                 }
                }  
         }
            
            sb.append("</select> \n");         
            sb.append("</td>\n");
            
            sb.append("</tr>\n");
            sb.append("</table>\n");
            
            sb.append("<div id=\"scriptDiv\" style=\"display:none\">");
            sb.append("<script language=\"javascript\" type=\"text/javascript\">\n");
            sb.append("<!--\n");
            sb.append("var groups = document."+form+"."+param1+".options.length;\n");
            sb.append("var group = new Array(groups);\n");
            
            sb.append("for (i = 0; i < groups; i++)\n");
            sb.append("{\n");
            sb.append("    group[i]=new Array();\n");
            sb.append("}\n");        sb.append("group[0][0]=new Option(\"请选择\",\"0\");\n");
            
            if(listC != null)
            {
                for(int i = 1; i <= listC.size(); i++)
                {
                 sb.append("group["+i+"][0]=new Option(\"请选择\",\"0\");\n");
                 int j = 1;
                 set = ((TCountry)listC.get(i-1)).getProvinceSet();
                 for(Iterator it = set.iterator(); it.hasNext();)
                 {
                 province = (TProvince)it.next();
                 sb.append("group["+i+"]["+j+"]=new Option(\""+province.getProvincename()+"\",\""+province.getProvinceid()+"\");\n"); 
                 j++;
                 }            
                }
            }        sb.append("var temp=document."+form+"."+param2+";\n");
            sb.append("function redirect(x)\n");
            sb.append("{\n");
            sb.append("    for (m=temp.options.length-1;m>0;m--)\n");
            sb.append("    {\n");
            sb.append("      temp.options[m]=null;\n");
            sb.append("    }\n");
            sb.append("    for (i=0;i<group[x].length;i++)\n");
            sb.append("    {\n");
            sb.append("        temp.options[i]=new Option(group[x][i].text,group[x][i].value);\n");
            sb.append("    }\n");
            
            sb.append("    if(parseInt(temp.options.length) > 1)\n");
            sb.append("    {\n");
            sb.append("        document.getElementById(\""+param2+"\").style.display=\"block\";\n");
            sb.append("    }else {\n");
            sb.append("       document.getElementById(\""+param2+"\").style.display='none';\n");
            sb.append("    }\n");
            sb.append("} \n");
            
            if(szCID != null && szPID == null)
            {
                sb.append("    for (i=0;i<group["+szCID+"].length;i++)\n");
                sb.append("    {\n");
                sb.append("        temp.options[i]=new Option(group["+szCID+"][i].text,group["+szCID+"][i].value);\n");
                sb.append("    }\n");        
            }
            
            sb.append("    if(parseInt(temp.options.length) > 1)\n");
            sb.append("    {\n");
            sb.append("        document.getElementById(\""+param2+"\").style.display=\"block\";\n");
            sb.append("    }\n");
            
            
            //sb.append("redirect("+szCID.trim()+")\n");
            
            sb.append("//-->\n");
            sb.append("</script> \n");   
            sb.append("</div>");
            return sb;
        }
        public void setParam1(String param1) {
            this.param1 = param1;
        }    public void setParam2(String param2) {
            this.param2 = param2;
        } public void setForm(String form) {
    this.form = form;
    }}
      

  3.   

    效果是 <table border='0'>
    <tr>
    <td>
    <select name="countryId" id="countryId" style="width:150" onChange="redirect(this.options.selectedIndex)" >
    <option value="0">--请选择--</option>
    <option value="1">中国</option>
    <option value="2">文莱</option>
    <option value="3">柬埔寨</option>
    <option value="4">印尼</option>
    <option value="5">
    老挝</option>
    <option value="6">马来西亚</option>
    <option value="7">缅甸</option>
    <option value="8">菲律宾</option>
    <option value="9">新加坡</option>
    <option value="10">泰国</option>
    <option value="11">越南</option>
    <option value="2001">china</option>
    <option value="2002">Brunei
    </option>
    <option value="2003">Cambodia
    </option>
    <option value="2004">Indonesia
    </option>
    <option value="2005">Laos Malaysia</option>
    <option value="2006">Malaysia
    </option>
    <option value="2007">Myanmar
    </option>
    <option value="2008">Philippines</option>
    <option value="2009">Singapore
    </option>
    <option value="2010">Thailand
    </option>
    <option value="2011">Vietnam
    </option>
    </select> 
    </td>
    <td>
    <select name="provinceId" id="provinceId" style="width:100;display:none">
    <option value="0">--请选择省份--</option>
    </select> 
    </td>
    </tr>
    </table>
    <div id="scriptDiv" style="display:none"><script language="javascript" type="text/javascript">
    <!--
    var groups = document.registerForm.countryId.options.length;
    var group = new Array(groups);
    for (i = 0; i < groups; i++)
    {
        group[i]=new Array();
    }
    group[0][0]=new Option("请选择","0");
    group[1][0]=new Option("请选择","0");
    group[1][1]=new Option("北京","1");
    group[1][2]=new Option("上海","2");
    group[1][3]=new Option("广东","3");
    group[1][4]=new Option("广西","4");
    group[1][5]=new Option("安徽","5");
    group[1][6]=new Option("山东","6");
    group[1][7]=new Option("福建","7");
    group[1][8]=new Option("甘肃","8");
    group[1][9]=new Option("贵州","9");
    group[1][10]=new Option("海南","10");
    group[1][11]=new Option("河北","11");
    group[1][12]=new Option("河南","12");
    group[1][13]=new Option("黑龙江","13");
    group[1][14]=new Option("吉林","14");
    group[1][15]=new Option("江苏","15");
    group[1][16]=new Option("浙江","16");
    group[1][17]=new Option("江西","17");
    group[1][18]=new Option("辽宁","18");
    group[1][19]=new Option("内蒙古","19");
    group[1][20]=new Option("宁夏","20");
    group[1][21]=new Option("青海","21");
    group[1][22]=new Option("山西","22");
    group[1][23]=new Option("陕西","23");
    group[1][24]=new Option("四川","24");
    group[1][25]=new Option("天津","25");
    group[1][26]=new Option("西藏","26");
    group[1][27]=new Option("新疆","27");
    group[1][28]=new Option("云南","28");
    group[1][29]=new Option("重庆","29");
    group[1][30]=new Option("湖南","30");
    group[1][31]=new Option("湖北","31");
    group[1][32]=new Option("香港","32");
    group[1][33]=new Option("澳门","33");
    group[1][34]=new Option("台湾","34");
    group[2][0]=new Option("请选择","0");
    group[3][0]=new Option("请选择","0");
    group[4][0]=new Option("请选择","0");
    group[5][0]=new Option("请选择","0");
    group[6][0]=new Option("请选择","0");
    group[7][0]=new Option("请选择","0");
    group[8][0]=new Option("请选择","0");
    group[9][0]=new Option("请选择","0");
    group[10][0]=new Option("请选择","0");
    group[11][0]=new Option("请选择","0");
    group[12][0]=new Option("请选择","0");
    group[13][0]=new Option("请选择","0");
    group[14][0]=new Option("请选择","0");
    group[15][0]=new Option("请选择","0");
    group[16][0]=new Option("请选择","0");
    group[17][0]=new Option("请选择","0");
    group[18][0]=new Option("请选择","0");
    group[19][0]=new Option("请选择","0");
    group[20][0]=new Option("请选择","0");
    group[21][0]=new Option("请选择","0");
    group[22][0]=new Option("请选择","0");
    var temp=document.registerForm.provinceId;
    function redirect(x)
    {
        for (m=temp.options.length-1;m>0;m--)
        {
          temp.options[m]=null;
        }
        for (i=0;i<group[x].length;i++)
        {
            temp.options[i]=new Option(group[x][i].text,group[x][i].value);
        }
        if(parseInt(temp.options.length) > 1)
       {
            document.getElementById("provinceId").style.display="block";
        }else {
           document.getElementById("provinceId").style.display='none';
       }

        if(parseInt(temp.options.length) > 1)
       {
            document.getElementById("provinceId").style.display="block";
        }
    //-->
    </script>
      

  4.   

    楼上兄弟的  方法可以   但我的  方法是   选择第一个的时候  onchang提交表单   根据所选 查询第二个列表内容可是新的问题又出现了  第一个列表中我选的值被刷新显示为未选时的数据??
    我的环境是 struts 下做的
    ??
    那位兄弟   有好的解决方案??
    谢谢      盼望中
      

  5.   

    你用同一个页面,同一个Form。并且用struts 标签作下拉菜单onchang后还是回到原来的页面。因为struts 标签时自动从Form里面取值的。Form值不会消失,所以这个下拉显示的值 ,还是你选择递交时候的值。
      

  6.   

    <script language="JavaScript">
    <!--
    function onChange()
    {
       thisForm = document.boothForm;   
       thisForm.action="/expo/boothSearch.do";
       thisForm.submit();     
    }
    //-->
    </script><html:select property="expohallid" style="width:200;" onchange="onChange()">
        <html:option value="0">请选择</html:option>
        <html:optionsCollection name="expoHallList" value="expohallid" label="boothname" />
    </html:select>html:optionsCollection中是Java搜索出来, set到expoHallList中去的