js文件:
为什么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.但是kot和item的长度是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> <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> <%=billdetails_be.get(i).price%></TD>
<TD> <%=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);
在AVAILABLE:状态数组的长度为:1-这是问题。
最佳答案
首先,在所有循环中都通过itemarr2进行循环有点奇怪,所以我不明白为什么您不只有一个循环,里面包含所有逻辑。
其次,您将遍历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的大小,并且正如我所说的那样,您可以将所有逻辑逻辑推到一个循环中。
关于您的Js文件,我们需要查看如何设置计数,但是如果计数值大于dropdown1的大小,那么您将获得数组indexOutofbound异常。
更新:
您说count = 18,但是您没有使用count初始化statarr2。您可以使用statCB2.length对其进行初始化。
int[] statarr2=new int[statCB2.length];
反过来statCB2.length也未使用count初始化,而是使用request.getParameterValues(“ itemStatus1”);初始化。
String[] statCB2=request.getParameterValues("itemStatus1");
因此,我确实相信您的项目状态等于1。尤其是因为在您的Js上,您具有以下代码。
... "&itemStatus1=" +dropdown1[i]+ ...
因此itemStatus1等于dropdown1 [i]上的项目。因此,itemStatus1不等于count或dropdown1的大小。它仅等于索引(i)的dropdown1中的项目数,我认为是1;并且您始终可以使用alert()或console.log()进行测试。
更新:
您说count = 18,但是您没有使用count初始化statarr2。您可以使用statCB2.length对其进行初始化。
int[] statarr2=new int[statCB2.length];
反过来statCB2.length也未使用count初始化,而是使用request.getParameterValues(“ itemStatus1”);初始化。
String[] statCB2=request.getParameterValues("itemStatus1");
因此,我确实相信您的项目状态等于1。尤其是因为在您的Js上,您具有以下代码。
... "&itemStatus1=" +dropdown1[i]+ ...
因此itemStatus1等于dropdown1 [i]上的项目。因此,itemStatus1不等于count或dropdown1的大小。它仅等于索引(i)的dropdown1中的项目数,我认为是1;并且您始终可以使用alert()或console.log()进行测试。
如果您希望itemStatus1 = = dropdown1的大小,请插入
... "&itemStatus1=" +dropdown1[1]+ ...
你应该使用
... "&itemStatus1=" +dropdown1.length+ ... or
... "&itemStatus1=" +dropdown1.size+ ... (whichever is correct).
另外,另一种选择是不使用itemStatus1,而是使用count或dropdown1.length初始化statCB2数组。
String[] statCB2= new String[count] or String[] statCB2= new String[dropdown1.length]
这应该够了吧