2014-09-04 50 views
1

js文件綁定:數組索引的JSP文件

爲什麼dropdown1的大小來爲1?

function savethechanges(){ 
for(var i=0;i<count;i++) 
{ 
    dropdown1[i]=document.getElementById("sel"+i).value; 
    kot[i]=document.getElementById("kot"+i).value; 
    item[i]=document.getElementById("itemcode"+i).value; 
    if(dropdown1[i] == 0){ 
     document.detailsview.action="BillCB.jsp?method=" + "11" + "&itemcode=" +item[i]+ "&kot=" +kot[i]+ "&itemStatus1=" +dropdown1[i]+ "&billno=" +billno; 
    } 
    else if(dropdown1[i] == 1){ 
     document.detailsview.action="BillCB.jsp?method="+"9"+"&itemcode="+item[i]+"&kot="+kot[i]+"&itemStatus1="+dropdown1[i]+ "&billno="+billno; 
    } 
    else{ 
     document.detailsview.action= "BillCB.jsp?method="+"10"+"&itemcode="+item[i]+"&kot="+kot[i]+"&itemStatus1="+dropdown1[i]+ "&billno="+billno; 
    } 
} 
} 

JSP文件:

在檢索這裏的dropdown1長度爲1.but果德和項目長度爲18 請提供您的解決方案!

case 11: 
gotMethod = true; 
billdetails_be.billno = Integer.valueOf(request.getParameter("billno")); 
String[] kotCB2=request.getParameterValues("kot"); 
String[] itemCB2=request.getParameterValues("itemcode"); 
String[] statCB2=request.getParameterValues("itemStatus1"); 
int[] kotarr2=new int[kotCB2.length]; 
int[] itemarr2=new int[itemCB2.length]; 
int[] statarr2=new int[statCB2.length]; 
System.out.println("IN AVAILABLE:length of array is:"+statCB2.length); 
System.out.println("IN AVAILABLE:length of array is:"+kotCB2.length); 
for(int i=1;i<itemarr2.length;i++) 
{ 
    kotarr2[i]=Integer.parseInt(kotCB2[i]); 
} 
for(int i=1;i<itemarr2.length;i++) 
{ 
    itemarr2[i]=Integer.parseInt(itemCB2[i]); 
} 
for(int i=1;i<itemarr2.length;i++) 
{ 
    statarr2[i]=Integer.parseInt(statCB2[i]); 
} 
for(int i=1;i<itemarr2.length;i++) 
{ 
    int kotint2=kotarr2[i]; 
    int itemint2=itemarr2[i]; 
    int statint2=statarr2[i]; 
    System.out.println(i+"the value of kot in available"+ kotint2); 
    int availablebill = websrv.availablebill(billdetails_be.billno, kotint2, itemint2,statint2); 
    } 

設計頁面(JSP)

<% 
for(int i=0;i<count;i++){ 
%> 
<TR> 
<TD> <input id="itemcode<%=i%>" type="hidden" name="itemcode" value=" <%=billdetails_be.get(i).itemcode%>"></TD> 
<TD><%=billdetails_be.get(i).itemdescription%></TD> 
<TD>&nbsp;&nbsp;<input id="quantity<%=i%>" type="text" name="quantity" style="width: 30px;" readOnly="readonly" value="<%=billdetails_be.get(i).quantity%>" > 
<input type="submit" id="inc<%=i%>" onclick= "doIt1(1,<%=i%>);" value="+" style="width:20px; height:20px; border-radius:10px; padding:0 0; " /> 
<input type="submit" id="dec<%=i%>" onclick="doIt1(-1,<%=i%>);" value="-" style="width:20px; height:20px; border-radius:10px; padding:0 0; "/> 
</TD> 
<TD>&nbsp;&nbsp;<%=billdetails_be.get(i).price%></TD> 
<TD>&nbsp;&nbsp;<%=billdetails_be.get(i).itemstatusdescription%></TD> 
<td> 
<select name="statusi" id="sel<%=i%>"> 
<option value="0">Available</option> 
<option value="1">Unavailable</option> 
<option value="2">Delete</option> 
</select> 
</td>    
<td> <input id ="kot<%=i%>" type="text" style="border: 0px solid #000000;" name="kot" style="cursor: text" readonly="readonly" value="<%=billdetails_be.get(i).kotno%>"></td>   
<TD> <input id="myquantity<%=i%>" type="hidden" name="quantity1" value="  <%=billdetails_be.get(i).quantity%>"></TD> 
</TR> 
<% 
} 
%> 
<td><input style="width: 150px; " class="btn btn-green btn-large" type="submit" name="save" id="save" value="save" class="button" onclick="savetheChanges(<%=count%>);"> </td> 

新變化

1,本是在js文件,從中我傳遞價值BillCB .jsp

document.detailsview.action="BillCB.jsp?method=" + "11" + "&itemcode=" +itemcode1[i]+ "&kot=" +kot1[i]+ "&itemStatus1=" +selection[i]+ "&billno=" +billno; 

2.本是在BillCB.jsp文件(方法:11)

String[] statCB2=request.getParameterValues("itemStatus1"); 
int[] statarr2=new int[statCB2.length]; 
System.out.println("IN AVAILABLE:length of STATUS array is:"+statCB2.length); 

有:STATUS陣列的長度爲:1-這就是問題所在。

+0

請提供更多的信息,如實際的標記與IDS「選擇」元素+我,「果德」 + i和「itemcode」 +我...它不清楚這些是從哪裏來的 – ne1410s 2014-09-04 06:32:43

+0

計數值爲18 – vignesh 2014-09-04 06:44:15

回答

-1
dropdown1[i]=document.getElementById("sel"+i).value; 

不會得到在下拉列表選擇的值。

試試這個:

var sel = document.getElementById("sel"+i); 
var selection = sel.options[sel.selectedIndex].value; 
+0

先生,但是kot和item的值是如何正確取得的。 – vignesh 2014-09-04 06:57:54

+0

kot和item是元素在標記中顯式設置了它們的'值',所以它們在第一次呈現時被填充。 sel下拉菜單的「值」是動態的,並且選擇需要以某種方式持久保存回服務器。 – ne1410s 2014-09-04 07:04:29

+0

fine.but將sel和selection聲明爲變量是正確的嗎?它應該是一個數組知道嗎? – vignesh 2014-09-04 07:06:32

0
  1. 首先,它是一點點奇怪的是,在所有的循環您通過itemarr2循環,所以我不明白你爲什麼不只有一個循環與所有的邏輯裏面。
  2. 其次,您正在循環itemarr2,然後使用itemarr2的當前索引來訪問和分配其他數組中的值。如果這個數組的任何一個比itemarr2的尺寸小,你將得到一個數組indexOutofbound異常。

    for(int i=1;i<itemarr2.length;i++) 
    { 
        kotarr2[i]=Integer.parseInt(kotCB2[i]); //If size of itemarr2 is bigger than kotarr2 or is bigger than kotCB2. You will get an array indexOutofbound exception. 
    } 
    for(int i=1;i<itemarr2.length;i++) 
    { 
        itemarr2[i]=Integer.parseInt(itemCB2[i]); //If size of itemarr2 is bigger than itemCB2. You will get an array indexOutofbound exception. 
    } 
    for(int i=1;i<itemarr2.length;i++) 
    { 
        statarr2[i]=Integer.parseInt(statCB2[i]); //If size of itemarr2 is bigger than statarr2 or is bigger than statCB2. You will get an array indexOutofbound exception. 
    } 
    for(int i=1;i<itemarr2.length;i++) 
    { 
        int kotint2=kotarr2[i]; //If size of itemarr2 is bigger than kotarr2. You will get an array indexOutofbound exception. 
        int itemint2=itemarr2[i]; //If size of itemarr2 is bigger than itemarr2. You will get an array indexOutofbound exception. 
        int statint2=statarr2[i]; //If size of itemarr2 is bigger than statarr2. You will get an array indexOutofbound exception. 
        System.out.println(i+"the value of kot in available"+ kotint2); 
        int availablebill = websrv.availablebill(billdetails_be.billno, kotint2, itemint2,statint2); 
    } 
    

所以,你必須確保kotarr2的大小,kotCB2,itemCB2,statarr2,statCB2總是大於或等於itemarr2的大小,正如我所說的,你可以PUL的所有邏輯insdide一個單一的循環。

關於您的Js文件,我們需要了解如何設置您的計數,但是如果您的計數值大於dropdown1的大小,那麼您將得到一個數組indexOutofbound異常。

UPDATE:

你說的那個數= 18,但你不使用計數初始化statarr2。你用statCB2.length初始化它。

 int[] statarr2=new int[statCB2.length]; 

反過來statCB2.length也不使用它使用request.getParameterValues( 「itemStatus1」)初始化的計數初始化;

 String[] statCB2=request.getParameterValues("itemStatus1"); 

所以我相信你的物品狀態等於1.尤其是因爲在你的Js上你有以下代碼。

... "&itemStatus1=" +dropdown1[i]+ ... 

因此itemStatus1將等於dropdown1 [i]上的項目。因此itemStatus1不等於計數或等於dropdown1的大小。它只相當於索引(i)中我認爲是1的dropdown1中的項目數;你總是可以使用alert()或console.log()來測試它。

UPDATE:

你說的那個數= 18,但你不使用計數初始化statarr2。你用statCB2.length初始化它。

 int[] statarr2=new int[statCB2.length]; 

反過來statCB2.length也不使用它使用request.getParameterValues( 「itemStatus1」)初始化的計數初始化;

 String[] statCB2=request.getParameterValues("itemStatus1"); 

所以我相信你的物品狀態等於1.尤其是因爲在你的Js上你有以下代碼。

... "&itemStatus1=" +dropdown1[i]+ ... 

因此itemStatus1將等於dropdown1 [i]上的項目。因此itemStatus1不等於計數或等於dropdown1的大小。它只相當於索引(i)中我認爲是1的dropdown1中的項目數;你總是可以使用alert()或console.log()來測試它。


如果你想itemStatus1是=到dropdown1的大小,然後insted的的

 ... "&itemStatus1=" +dropdown1[1]+ ... 

你應該使用

 ... "&itemStatus1=" +dropdown1.length+ ... or 

    ... "&itemStatus1=" +dropdown1.size+ ... (whichever is correct). 

另外,另一種方法是不玩與itemStatus1在一起,而是使用count或dropdown1來初始化您的statCB2數組。length

String[] statCB2= new String[count] or String[] statCB2= new String[dropdown1.length] 

這應該做的伎倆

+0

我同意itemarr的大小應該更大。但問題是大小statarr2是1.it應該是18. – vignesh 2014-09-04 07:50:28

+0

@VigneSh答案已更新 – Ferox 2014-09-04 09:22:53

+0

我不清楚。你可以告訴我在哪裏做出改變? – vignesh 2014-09-04 09:28:25