JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Servlet/JSP 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [問題]即時多層下拉選單 [精華]
ㄚ孝





發文: 81
積分: 0
於 2003-06-07 09:05 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
不好意思!!

小弟想請教各位前輩關於即時多層下拉選單的寫法 ...

小弟想寫出類似頁面上有著數個下拉選單,而在第一個選單決定後再來去判斷下一個值 ...

以下是小弟的構想 ...

下拉選單1為國別
下拉選單2為城市
下拉選單3為鄉鎮

小弟想讓下拉選單1選擇國別後馬上從資料庫中以選擇的國別為條件,將屬於該國的城市從資料庫讀出放到下拉選單2供使用者選取,而使用者再進行選取城市的動作 ...

最後再由使用者所選取的國別、城市為條件到資料庫中馬上將鄉鎮讀出,不過如果使用者一但重新選擇國別,那麼城市與鄉鎮的值就即時被清空 ...

小弟在網路上向其他位前輩請益得知使用JavaScript的OnChange可以達到,不過小弟怎麼寫都寫不出來 ...

不知道該怎麼寫才對,小弟怎麼寫都是選取國別後,城市依然是一片空白呀>"<


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
browser

戀香

版主

發文: 3570
積分: 1
於 2003-06-07 18:19 user profilesend a private message to usersend email to browserreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
以前找到的相關程式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<html>
<script language=javascript>
changelist();
function changelist()
{
switch(document.data.sex.value)
{
case "1":
document.all.namelist.innerHTML="<select name=actname><option value=1>台灣<option value=2>中國</select>"
break;
case "2":
document.all.namelist.innerHTML="<select name=actname><option value=1>田麗<option value=2>葉祖媚</select>"
break;
}
}                                                                                
</script>      
                                                                          
<form name=data>                                                                           
<select name=sex onChange=Javascript:changelist();>
<option value=1 selected>國別
<option value=2>女演員
</select>
                                                                              
<div id=namelist></div>
                                                                                
</form>                                                                             
</html>
 


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
ㄚ孝





發文: 81
積分: 0
於 2003-06-09 08:34 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
browser兄,小弟不太了解您的程式,不知道是否可以稍作講解??

因為看起來好像並沒有前往資料庫將資料撈出來^"^


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
browser

戀香

版主

發文: 3570
積分: 1
於 2003-06-09 09:23 user profilesend a private message to usersend email to browserreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
ㄚ孝 wrote:
browser兄,小弟不太了解您的程式,不知道是否可以稍作講解??

因為看起來好像並沒有前往資料庫將資料撈出來^"^


哈哈 .. 我沒看清楚你的問題 ..
以為只是要做單純的js ...


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
ㄚ孝





發文: 81
積分: 0
於 2003-06-09 14:05 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
browser兄

不知道您是否知道這方面的資訊??

因為覺得相當的好用,不用一個頁面一個頁面進行

在一個頁面中就可以處理好了 ...


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
jackyliu





發文: 23
積分: 0
於 2003-06-22 02:06 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
ㄚ孝 wrote:
browser兄

不知道您是否知道這方面的資訊??

因為覺得相當的好用,不用一個頁面一個頁面進行

在一個頁面中就可以處理好了 ...


可以先用 JSP 把資料抓出來, 再放到 JavaScript 的 Array 裡面.
然後根據使用者的選擇去抓 Array 資料.

不過這個方法我覺得不好...Tongue


reply to postreply to post
夢想家
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
mousetail





發文: 142
積分: 1
於 2003-06-22 13:06 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我有ASP+Javascript的code,不過沒有轉成JSP
如果要的話 可以提供給你
只是程式碼有點亂...我也是從網路上取得的

方法就是jackyliu所說的那樣


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
alanting

Alan Ting



發文: 200
積分: 3
於 2003-06-22 23:21 user profilesend a private message to usersend email to alantingreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
//在這我就只做國別跟城市在javascript 的關連下拉選單,因為你要三層跟二層設計其實是一樣的
//抓取你要對映的主要Key值EX:國別
int i;//這是要給javascript 中的陣列值
stmt = Conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
stmt2 = Conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
SQL = "Select * From country";
rs = stmt.executeQuery(SQL);
%>

<script>
function ChangeSelect(country, city)<===分別將國家及城市代入javascript的function中,此部分會在html中詳解
{
val = country.options[country.options.selectedIndex].value; <==抓取表單country中的index值
  
  <%while(rs.next()){
  SQL2 = "select * from 城市";
  
  rs2 = stmt2.executeQuery(SQL2);
  %>
  if (val == '<%=rs.getString("國別名稱")%>')
  {
    
    <%while(rs2.next()){//計算出有多少的city在這個國家中
      i++;
    }%>
    city.length = <%=i%>; <==表單中city的下拉表單長度
    <%
    i=0;
    rs2.first();//回到城市第一筆資料
    do{%>
    city.options[<%=i%>].value = '<%=rs2.getInt("城市代碼")//這是下拉表單中value的值,你也可以代入其他資料%>'; city.options[<%=i%>].text = '<%=rs2.getString("城市名稱")//這是下拉表單中文字顯示部分%>';
    <%
    i++;
    }while(rs2.next());
    i=0;%>
  }
  <%}
  rs.first();//要回到第一筆的原因是因為你要把國別抓入html的select中%>
}
</script>

====Html表現方式====
<form name="selection">
<select name=country onChange="ChangeSelect(document.selection.country,document.selection.city)" size="1">
                   <option>==請選擇國家==</option>
                   <%do{%>
                   <option value="<%=rs.getString("國別名稱")%>"><%=rs.getString("國別名稱")%></option>
                   <%}while(rs.next());%>
                   </select><BR>
                 選擇您要的城市</font><br>
                   <SELECT name=city>

                   </SELECT> </p>


reply to postreply to post
重新學習...拜讀各位大大的巨作中..
作者 Re:[問題]即時多層下拉選單 [Re:alanting]
alanting

Alan Ting



發文: 200
積分: 3
於 2003-06-22 23:24 user profilesend a private message to usersend email to alantingreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
這是配合jsp設計出的下拉表單,這就是你要的功能,你研究一下吧,因為這蠻多東西的,希望你看得懂。這會有陣列在裡面,要跑出來你看過javascript的code你才會比較了解。

reply to postreply to post
重新學習...拜讀各位大大的巨作中..
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
evenlin



發文: 0
積分: 0
於 2003-08-02 00:55 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
感謝alanting 提供的程式碼,受益匪淺呀!但我RUN出來的情況是不論「國家」選擇哪一個,在「城市」的選單都會全部出現,如果我想只選擇「台灣」接下來 只會出現台北市....屏東縣 而不會跑出「 東京」之類的選項, 請問該怎麼修改這個程式碼?
^^
感溫


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
anthonycs



版主

發文: 1195
積分: 6
於 2003-08-02 15:43 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
如果要動態出現城市,而且資料儲存在資料庫
選擇了國家之後這個JSP網頁就要submit一次
也就是選擇不同的國家,JSP就要查詢一次資料庫,以取得這個國家的城市

假設: 儲存城市的table名稱是City, 城市名稱的欄位是CityName
改成:

1
SQL2="select CityName from City where Country='xxx'";   // xxx就是表單元素country的值


接著用一點Javascript的技巧,讓使用者選完國家之後就submit表單 (onchange)
另外,也可以選擇多個國家喔 (試著思考看看)


anthonycs edited on 2003-08-06 13:37
reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
ajax0953





發文: 8
積分: 0
於 2004-03-31 15:05 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我是菜鳥...
之前也想做一個動態的下拉式選單,我在一支JSP中建了
兩個statement分別去資料庫抓資料,第二個statement加了一個
where的條件...然後去call自己....
第一個下拉式選單的欄位很成功,有把資料庫第一個欄位值抓出來,
但是遇到問題了...
<<突然間發現自己邏輯有很大的問題...兩個statement是同時進行的!!!>>
所以說他第二個select的where是抓不到值的!!!!
於是乎就卡住了....


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
shyan68





發文: 7
積分: 1
於 2004-04-07 18:11 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我今天剛做好一個三層的下拉式選單!
我是應用到struts 的技術,
資料先找好,放入一個固定的地方,再設成bean
等於是在記憶體裡放入三個table的資料
再來就是onchange()時
就從主畫面空跑一個action回到主畫面
這時就可從action form抓值
等於再做一次jsp,再從action form抓值來辨斷!
以此類推……不過看畫面的感覺不是那麼阿莎力

覺得還是將資料放到javascripe 的array裡
再從array讀出來,才是正式的做法,比較快…
我還要再努力!!


shyan68 edited on 2004-04-07 18:14
reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
x3711699





發文: 148
積分: 4
於 2004-04-08 20:41 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我有一個新的問題:

各位大大是否知道yahoo拍賣的商品分類??
當你要拍賣一件新商品時會先要選擇商品類別:
有幾個框架,讓你選擇類別
它那樣的設計又是如何實作的??

參考網址 http://tw.bid.yahoo.com/tw/0-submit.html


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:x3711699]
alanting

Alan Ting



發文: 200
積分: 3
於 2004-04-11 01:41 user profilesend a private message to usersend email to alantingreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
x3711699 wrote:
我有一個新的問題:

各位大大是否知道yahoo拍賣的商品分類??
當你要拍賣一件新商品時會先要選擇商品類別:
有幾個框架,讓你選擇類別
它那樣的設計又是如何實作的??

參考網址 http://tw.bid.yahoo.com/tw/0-submit.html

參考javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script>
  function createOptions(){
    var option = new Option(document.form1.select1.value)
    document.form1.select2.options[2] = option;
  }
 
</script>
<form name="form1">
  <select name="select1" size="10">
    <option>選擇項目</option>
    <option value="項目1">項目1</option>
    <option value="項目2">項目2</option>
  </select>
 
<input type="button" value=-->"" onClick="createOptions()">
<select name="select2" size="10">
</form>


我沒仔細檢查,如果要改成yahoo那樣可以把botton事件改成在select中的onClick


reply to postreply to post
重新學習...拜讀各位大大的巨作中..
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
AdaHsu





發文: 25
積分: 0
於 2004-04-19 12:23 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
即時多層下拉選單的概念要從兩層談起,並且配合 JavaScript 的語法後才會比較清楚。

※ 註:原文的目標是選取國別 or 城市名後,再向資料庫讀取城市 or 鄉鎮的資料,這樣的話就配合 onChange 自行觸動 form.submit() 回 Server 端重新讀取相關資料即可,並不困難。但是傳輸的成本和資料量的多寡就必須加以評量。並不是 Client 端立即反應就比較好 ( 如果第一頁產生出來要等個 5 分鐘,那就不要做下面介紹的方法,直接 submit 回 Server 重新讀取少量資料即可) 。

1. 選單物件 <select> 中包含的選項資訊 <option> 是一個陣列物件,因此只要修改該陣列的長度即可動態調整選項內容。
1
2
3
4
5
6
  select.options.length = 0; // 移除所有選項
  select.options.length = 4; // 設定有四個選項
  select.options[0] = '台北';
  select.options[1] = '台中';
  select.options[2] = '台南';
  select.options[3] = '高雄';


2. 在 HTML Object 中可以捕捉不少種事件,為了讓下拉選單的指定項目改變時即觸發相關的作業,我們需要指定 onChange 的事件捕捉程序,方式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
  <script>
      function doNewCountry( obj ) {
        alert( '您變更國家為:' + obj.value );
      }
  </script>
 
  <body>
    <select name="country" onChange="doNewCountry( this );">
        <option value="Taiwan">台灣</option>
        <option value="Hongkong">香港</option>
        <option value="I don't Know">澳門</option>
        <option value="China">中國</option>
     </select>
   </body>
</html>


3. 如果需要將資料全部放到頁面中時,則 JavaScript 中可以使用多維陣列,用法與 Java 很像,只要 new 出來就好,如下例:
1
2
3
var A = new Array();
A[0] = new Array();
A[0][0] = new Array();


4. 整合上述的基本資訊後,可以得到這樣一個流程:

1
2
  a. 當使用者變更了第一個選單內的項目後,就透過 onChange 事件指定的副程序去變更第二個選單內的資料。
  b. 變更第二個選單內的資料的作業是先將第二個選單內的資料清空後,再把新的選項內容填入 


範例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<html>
 
  <script>
 
    // 通常,當資料選項的變動性不大時,都會直接寫成 .js 檔含入即可。
 
    var country = new Array();          // 看幾個國家
    country[0] = '台灣';
    country[1] = '中國';
    country[2] = '日本';
 
    var city = new Array();
    city[0] = new Array();    // 台灣的城市
    city[0][0] = '台北';
    city[0][1] = '台中';
    city[0][2] = '台南';
    city[0][3] = '台高';
 
    city[1] = new Array();    // 中國的城市
    city[1][0] = '北京';
    city[1][1] = '上海';
    city[1][2] = '南京';
 
    city[2] = new Array();    // 日本的城市
    city[2][0] = '東京';
    city[2][1] = '名古屋';
 
  
    // 載入 master 選單,同時初始化 detail 選單內容
    function loadMaster( master, detail ) {
 
      master.options.length = country.length;
      for( i = 0; i < country.length; i++ ) {
        master.options[ i ] = new Option( country[i], country[i] );  // Option( text , value );
      }
 
      master.selectedIndex = 0;
      doNewMaster( master, detail );
    }
 
    // 當 master 選單異動時,變更 detail 選單內容
    function doNewMaster( master, detail ) {
    
      detail.options.length = city[ master.selectedIndex ].length;
      for( i = 0; i < city[ master.selectedIndex ].length; i++ ) {
        detail.options[ i ] = new Option( city[ master.selectedIndex ][ i ],
                                          city[ master.selectedIndex ][ i ] );
      }
    }
 
  </script>
 
  <body onload="loadMaster( document.getElementById( 'country' ), 
                            document.getElementById( 'city' ) );">
    <select name="country" id="country" 
        onChange="doNewMaster( document.getElementById( 'country' ), 
                               document.getElementById( 'city' ) );">
   </select>
   <select name="city" id="city">
   </select>
   </body>
</html>


5. 若是三層的選單呢?原理不變,主要是多一組陣列以記錄第三組選項內容,且新增第二組選單的 onChange 事件處理程序以便切換第三組選項,但老實說印象中只遇過一次這種特殊狀況,但我忘了實際的情形是怎樣了... :p 而且此時產生陣列的時間會拉長。

6. 通常我只會產生 city 陣列,country 內的選項則直接寫到 HTML 中,因為它不會改變。


AdaHsu edited on 2004-04-19 17:56
reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
tsechun





發文: 19
積分: 1
於 2004-04-21 02:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
如果不嫌髒的話
可以考慮使用 xmlHttp
不過browser端如果不是IE 或是IE版本太舊的話 要更新com原件

好處是:不會重複submit 設計的複雜度會低一點


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:shyan68]
yafeng





發文: 1
積分: 0
於 2004-07-29 10:53 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
HI,shyan68
Can you to specify your way of doing thing.
I'm a greenhorn,to think about struts's course of action.
thank.


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
andowson





發文: 77
積分: 3
於 2004-08-01 11:07 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
預先把資料放在JavaScript 中的Array物件裡,好處是快速方便,但缺點是未來的維護及資料傳輸上。網路上流通很廣的郵遞區號選擇程式,就是使用這個方法。
如果要達到原來問題的「即時」這點需求上,資料應該是必須再回到資料庫去取回,才是即時,故如果資料變動性不高者,可以考慮暫存到記憶體,但變動高的話就應該要再由資料庫去讀出。
微軟ASP在這個問題上,先前有推出一個Remote Scripting的技術,利用前端的一個RSProxy.class與Server端的rs.asp程式互動。網路上有人將這個MSRS的技術改用JavaScript配合hidden frame來完成稱為JSRS,後端的技術可以改用Servlet來取代原來的ASP,便可以達到所謂即時取資料庫撈資料的動作,不過這個東西有個小缺點,就是回上頁的部分會有點問題,因為它會偷偷幫你換頁,所以如果你執行過onChange後顯示出子選項新內容時,他已經幫你換過頁了,有興趣可以參考這個網址:
http://andowson.no-ip.com/examples/rmscpt/


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:andowson]
yingssu





發文: 111
積分: 1
於 2004-08-01 19:48 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
andowson wrote:
預先把資料放在JavaScript 中的Array物件裡,好處是快速方便,但缺點是未來的維護及資料傳輸上。網路上流通很廣的郵遞區號選擇程式,就是使用這個方法。
如果要達到原來問題的「即時」這點需求上,資料應該是必須再回到資料庫去取回,才是即時,故如果資料變動性不高者,可以考慮暫存到記憶體,但變動高的話就應該要再由資料庫去讀出。
微軟ASP在這個問題上,先前有推出一個Remote Scripting的技術,利用前端的一個RSProxy.class與Server端的rs.asp程式互動。網路上有人將這個MSRS的技術改用JavaScript配合hidden frame來完成稱為JSRS,後端的技術可以改用Servlet來取代原來的ASP,便可以達到所謂即時取資料庫撈資料的動作,不過這個東西有個小缺點,就是回上頁的部分會有點問題,因為它會偷偷幫你換頁,所以如果你執行過onChange後顯示出子選項新內容時,他已經幫你換過頁了,有興趣可以參考這個網址:
http://andowson.no-ip.com/examples/rmscpt/

我之前的案子也有這種需求!
我是使用JSP與JAVASCRIPT來做搭配使用
為了能夠一次把資料都讀進來
我先用JSP把資料都LOAD進來
再搭配JAVASCRIPT的語法載入到ARRAY
只要打之間的關係搞定!
你要幾層就有幾層
造成的結果就是網頁會隨著你的資料而長大....


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
ting626





發文: 10
積分: 0
於 2004-08-25 16:57 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
請問那我選單裡的值是要從資料庫叫出來該怎麼做?
是否有相關的例子提供給我?


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
i22616899





發文: 1
積分: 0
於 2004-09-04 17:55 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
以下是小弟依據alanting所提供的程式碼所用出來的兩層下拉式選單
我想請問一下如果是三層的話要如何改寫呢
因為小弟我寫了好幾次都寫不出來
我原本是想說再多一個onchange的事件
也就是說你必須知道第二個下拉式選單所選出來的值是什麼
可是我卻抓不到那個值
還有我的資料庫的建法是這樣的
第一個資料表的名稱是台北縣市,裡面的資料是台北市、台北縣
接著有兩個資料表,其名稱分別是台北市和台北縣
裡面的資料是台北市和台北縣的區名和鄉鎮市名
剩下的資料表就是以各區的區名或是鄉鎮市名當資料表的名稱
然後裡面的資料是存該地區的公車站站名
請問我要如何去實做動態的三層下拉式選單呢?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<%@ page import="java.sql.*" %>
<%@page import="java.io.* "%>
<%@ page contentType="text/html;charset=Big5" %>
<html>
 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>Test</title>
</head>
 
<body>
<%
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection Conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://140.115.84.223:1433;databasename=project","project","coolmeeting");
 
int i=0;
Statement stmt = Conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Statement stmt2 = Conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
String SQL = "Select * From 台北縣市";
ResultSet rs = stmt.executeQuery(SQL);
%>
 
<SCRIPT LANGUAGE="javascript">
<!--
function ChangeSelect(city, region)
{
val = city.options[city.options.selectedIndex].value;
 
  <%while(rs.next()){  
  
  String SQL2 = " select * from " +  rs.getString("台北縣市") ;  
  ResultSet rs2 = stmt2.executeQuery(SQL2);
  
  %>
  if (val == '<%=rs.getString("台北縣市")%>')
  {
    
    <%while(rs2.next()){
    i++;
    }%>
    region.length = <%=i%>; 
    <%
    i=0;
    rs2.first();
    do{%>
    region.options[<%=i%>].value = '<%=rs2.getString("區域名稱")%>'; region.options[<%=i%>].text = '<%=rs2.getString("區域名稱")%>';
    <%
    i++;
    }while(rs2.next());
    i=0;%>
  }
  <%}
  rs.first();%>
}
-->
</script>
 
<form name="selection">
<select name=city onChange="ChangeSelect(document.selection.city,document.selection.region)" size="1">
                   <option>==請選擇城市==</option>
                   <%do{%>
                   <option value="<%=rs.getString("台北縣市")%>"><%=rs.getString("台北縣市")%></option>
                   <%}while(rs.next());%>
                   </select><BR>                    
                 選擇您要的區域</font><br>
                   <SELECT name=region>
 
                   </SELECT> </p> 
</form>
</body>
</html>


i22616899 edited on 2004-09-04 22:17
reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
GuanChih

ASKA



發文: 243
積分: 2
於 2004-09-05 18:51 user profilesend a private message to usersend email to GuanChihreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
用struts的form bean來把值留住,
變成每次action給自己,就拿form bean裡的值來判斷,
再去資料存取的類別中,去搜尋出對應的條件,
再把collection設到struts 的 tag中 ;
用jsp做的話…
我之前有用session的方式來留值,不得已的情況做了一個四層下拉式 ;
也是做的出來啦…很難看而已


reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
jonz

我是粽子



發文: 18
積分: 0
於 2004-09-12 10:27 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我的做法是:
還給jsp一個乾淨的面目

<SELECT name='NATION' onChange='submit();'>
<OPTION>..略..
<OPTION>..略..
..略..
</SELECT>

<SELECT name='CITY'>
<%=regionObj.getCityOptions(request.getParameter("NATION"))%>
</SELECT>


其中 regionObj 是自定的物件,
其中要有public Stirng getCityOptions(String nation)這個method;
如果要做三層加一個鄉鎮,
只要在SELECT CITY中加上onclick='submit();'
再多做一個public Sttring getTownOptions(String city)的method就可以了,
要再加幾層都不是問題。

至於說你要每次都去DB裡面撈,或放在web server的記憶體,
就看你的考量了。

如果你功力更好的話,把它再做成tag看起來就更完美了。

我的經驗是:不要把太多java code留在JSP上(<%......%>這種),
因為JSP相較之下比較不好debug(小弟公司用的是WSAD,可以trace JSP喔~~)
而且會讓JSP變的很亂很難讀。

另外畫面html物件的控制要儘量用Java Script 來做,
不要寫一堆像是:
1
2
3
4
5
<%if(A==0){%>
  <SELECT>......</SELECT>
<%}else{%>
  <SELECT>.....</SELECT>
<%}>

這要是多起來…會讓人抓狂的…


jonz edited on 2004-09-12 10:37
reply to postreply to post
作者 Re:[問題]即時多層下拉選單 [Re:ㄚ孝]
joshua





發文: 2
積分: 0
於 2004-11-17 16:02 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
看到各位高手高來高去的, 小弟倒是想起一個比較適合給菜鳥看的做法:

記得當年年紀小, 只會一點點的HTML, JAVASCRIPT跟JSP, 就碰到一個CASE, USER希望:

1.畫面不要跳來跳去
2.點選完畫面會去後端撈資料

最後, 解決的方法, 很詐, 不過有點小麻煩, 不過程式沒放在手邊, 所以只能就概念敘述一下:

首先, 程式要拆成三個JSP, 一個是空的框架(假設叫main.jsp), 一個是畫面(假設叫show.jsp), 一個負責撈資料(假設叫submit.jsp)

空框架那隻程式(main.jsp), 切兩個frame, 畫面的frame(show.jsp)設為100%, 撈資料的frame(submit.jsp)設為0%

畫面那隻(show.jsp), 對於要變化的地方安排div tag, 並於USER選擇時, 寫個onchange()的java script, 把資料往撈資料的frame丟(submit.jsp), 並且將submit.jsp給submit出去;

當然, submit.jsp裡頭要安排幾個input tag來收資料, 並且要安排好submit給自己

當submit.jsp執行時, 先看看有沒有收到選項, 來決定是否要去db撈資料; 如果收到選項, 去撈好資料, 便可以將資料放入java script, 於onload的時候改寫show.jsp的div tag......

流程上, 大概就是這樣, 程式沒有包含很艱深的jsp技巧, 純粹靠java script變魔術,
frame之間要戶傳資料, 可用類似下面程式碼來傳:
window.parent.showFrame.form.userName.value = userName;
替其他frame進行submit, 可用:
window.parent.submitFrame.form.submit();
同理要改div tag,
window.parent.showFrame.myDiv.innerHTML="......省略.......";

如果要範例程式, 我得先找找, 不曉得丟到哪裡去了, 不過, 這算是邪道, 好孩子還是不要學比較好阿!!!

ps: 第一次發言, 還是在躲老闆的情況下, 所以有點寫的不是很好, 請大家見諒


joshua edited on 2004-11-17 16:07
reply to postreply to post
go to first page go to previous page  1   2   3  go to next page go to last page
» JWorld@TW »  Servlet/JSP 討論區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8