取数据库中的值动态生成下拉菜单Option
打开某一页时,从数据库中取值,动态生成下拉菜单。
不想每次打开页面时,都到数据库中的取值,而是该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




