CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

取数据库中的值动态生成下拉菜单Option

楼主goldmine()2006-04-24 15:12:05 在 Java / Web 开发 提问

打开某一页时,从数据库中取值,动态生成下拉菜单。  
   
  不想每次打开页面时,都到数据库中的取值,而是该Session中只取一次DB値、  
  可保存到Vector中、该如何做?  
   
  问题点数:100、回复次数:18Top

1 楼sisi_shen(思思神)回复于 2006-04-24 15:16:00 得分 5

private   List   enterpriseList   =   null;  
   
    public   List   getEnterpriseList()  
          {  
                  if   (enterpriseList.isEmpty())  
                  {  
                          refreshEnterpriseList();  
                  }  
                  return   enterpriseList;  
   
          }  
   
          public   void   refreshEnterpriseList()  
          {  
   
                  try  
                  {  
                          //此处为查询数据的业务方法  
                          enterpriseList   =   autoSuggest.findAllEnterprise();  
                  }   catch   (HibernateException   e)  
                  {  
                          e.printStackTrace();  
                  }  
   
          }  
   
  给你段代码。。研究一下。。Top

2 楼hanjienihao1()回复于 2006-04-24 15:31:20 得分 80

如果是在jsp页实现的话,用js比较好:  
  function   showStateList(current_list)   {  
  for(counter   =   0;counter   <   state_array.length;counter++)   {  
  current_list.options[counter]   =   new   Option(state_array[counter].Name,state_array[counter].Code)  
  }  
  }  
  主要是new   Option(name,value)其中,name是下拉菜单显示的文本,value是option的值  
  state_array为js数组,current_list为下拉菜单名  
  Top

3 楼hanjienihao1()回复于 2006-04-24 15:37:20 得分 0

也可以在jsp中这么写:  
  <select>  
  <%  
  for(int   i   =   0;i<vector.size;i++)   {  
  %>  
  <option   value="<%=(String)vector.get(i)%>"><%=(String)vector.get(i)%></option>  
  <%  
  }  
  %>  
  </select>Top

4 楼hanjienihao1()回复于 2006-04-24 15:39:22 得分 0

前者是通过任何事件都可以激发,后者在载入时调用,看情况而定拉  
  Top

5 楼goldmine()回复于 2006-04-24 15:49:41 得分 0

谢谢两位!  
   
  其实我就是不知在什么事件下,或是说如何把DB数据只取一次  
  保存在vector中。Top

6 楼rickhunterchen(千山鸟飞绝)回复于 2006-04-24 16:02:31 得分 5

其实我就是不知在什么事件下,或是说如何把DB数据只取一次  
  保存在vector中。  
   
  ==================================================  
  在action中:  
  Session   session=req.getSession();  
  session.setAttribute("vector",vector);  
   
  在页面,你只要迭代就可以了。只要session没注销,你的vector就一直存在。Top

7 楼hedingsheng(极光)回复于 2006-04-24 16:03:47 得分 0

marks  
  Top

8 楼yunqing1028(-_-)回复于 2006-04-24 16:35:00 得分 0

不懂!你这样做能提高多少性能?Top

9 楼issgates(一直很安静)回复于 2006-04-24 16:38:50 得分 0

但是你的数据库里的数据信息如果可能改变的话,当然不能只在初始的时候载入一次,写个refresh方法。如果确实只要select一次的话,写个类,在JSP里import一下就OK了,将查询结果集放在session里,每次查询前判断session里是否有对应值,无则查,有则不查,就OK拉。Top

10 楼goldmine()回复于 2006-04-24 17:10:35 得分 0

<%  
      Vector   payTypeItems   =   (Vector)session.getAttribute("payTypeItems");  
      if   (payTypeItems==null)   {  
          try   {  
              payTypeItems   =   dataModule.get_paytype();   //取値  
              session.setAttribute("payTypeItems",payTypeItems);  
          }      
          catch(Exception   e)   {  
              //e.printStackTrace();  
              session.setAttribute("payTypeItems",null);  
          }  
      }      
  %>  
  我是这样做的,问题基本解决。  
  Top

11 楼Timsole(一陀智慧)回复于 2006-04-24 17:15:01 得分 0

晚了   都讲完了Top

12 楼laughsmile(海边的星空)回复于 2006-04-24 18:39:22 得分 5

如果菜单内容不多的话,还是推荐使用js来保存菜单内容,而不是用sessionTop

13 楼goldmine()回复于 2006-04-25 08:34:38 得分 0

...使用js来保存菜单内容  
  --------------------------------------------------  
   
  是指用js数组存吗?  
  那一般在什么事件下,把数据库里的内容放入js数组中?      
   
  我用session来存,主要是考慮到安全保密性。Top

14 楼huxinsheng168(望M止渴)回复于 2006-04-25 08:47:49 得分 0

把页面的缓存打开Top

15 楼zuguanqun(小群)回复于 2006-04-25 09:25:14 得分 0

我觉得做个标签更方便  
  如果需要的话,我可以提供参考的代码Top

16 楼xiwandaxian()回复于 2006-04-25 09:40:14 得分 5

String   xmmc=new   String(request.getParameter("xmmc").trim().getBytes("ISO-8859-1"));      
           
  String   sql="select   a.xmmc,b.xgjg   from   tjxmb   as   a,cjjgzdb   as   b   where   a.xmbh=b.xmbh   and   a.xmmc='"+xmmc+"'";  
          ResultSet   RS=conn.executeQuery(sql);  
            try  
          {%>  
  <%   out.print("<input   type='text'   name='xmmc'   value='"+xmmc+"'>");  
  %>  
  <select   name="select"   size="1"   id="tag"   style="HEIGHT:   22px;   WIDTH:   80px">  
          <%   while(RS.next())  
              {  
              out.print("<option>");  
              out.print(RS.getString("xgjg"));  
              out.print("</option>");  
      }  
          }  
      catch(Exception   e)  
      {  
        }  
      RS.close();  
      %>  
  </select>  
  这样就行   那有那么麻烦。。。Top

17 楼laughsmile(海边的星空)回复于 2006-04-25 13:09:06 得分 0

你要考虑到安全,也可以写入客户端的cookie中.Top

18 楼goldmine()回复于 2006-04-25 13:44:19 得分 0

to   xiwandaxian:   你这样做,每次打开页面时,都要到数据库中的取值。  
                                  若表不大还行,若表中的数据多,効率会低。  
   
  to   laughsmile:   在cookie中保存数据、当页面关闭时,客户端一般还存在的,  
                                安全性不是很好吧?Top

相关问题

关键词

得分解答快速导航

  • 帖主:goldmine
  • sisi_shen
  • hanjienihao1
  • rickhunterchen
  • laughsmile
  • xiwandaxian

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo