涉及到的jsp页面为:proSpecSearch.jsp proSpec.jsp proSpecAdd.jsp proTypeSearchi.jsp proTypeSearch.jsp
解释:在proSpecAdd.jsp里,有这样的javascript方法,和调用javascript的事件处理函数,当你点查询时,就调用openwin()方法创建一个新的窗口。
function openwin() {
window.open("ProSpecServlet?flag=searchi","newwindow", "height=400,width=500,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no");
}
function choose(str1,str2,str3,str4){
document.all("PRODUCT_KIND").value=str1;
document.all("PRODUCT_NAME").value=str2;
document.all("PRODUCT_TYPE_NAME").value=str3;
document.all("PRODUCT_TYPE_ID").value=str4;
}
<input type="button" name="Submit4" value="查询" onclick="openwin()">
之后就转到了proTypeSearchi.jsp,这个页面里也有javascript方法,但没有调用方法的事件处理函数,当你点查询时,form表单提交,调用ProSpecServlet里的一个方法,之后转到proTypeSearch.jsp。
function closewin(str1,str2,str3,str4) {
window.opener.choose(str1,str2,str3,str4);
window.close();
}
</select> <input type="submit" name="Submit" value="查询">
我们接着来看proTypeSearch.jsp里的javascript方法和调用方法的事件处理函数,当你点确定的时候,调用closewin方法,并给javascript传递了四个参数,这四个参数就是要在proSpecAdd.jsp页面里展现的值,在closewin方法内部调用它父窗口的choose方法,也就是proSpecAdd.jsp这个页面所打开的窗口,之后通过choose方法获得想要展现的值。
function closewin(str1,str2,str3,str4) {
window.opener.choose(str1,str2,str3,str4);
window.close();
}
<td align="center"><input type="button" name=submit value=确定 onclick="closewin('<%=dbr.getString("PRODUCT_KIND_NAME")%>','<%=dbr.getString("PRODUCT_NAME").trim()%>','<%=dbr.getString("PRODUCT_TYPE_NAME").trim()%>','<%=dbr.getString("PRODUCT_TYPE_ID").trim()%>')"></td>
注意:window.opener这个窗口指的是当前窗口的父窗口,在这里指的是proSpecAdd.jsp这个页面打开的窗口,而不是proTypeSearchi.jsp这个页面打开的窗口,
这个proTypeSearchi.jsp页面和proTypeSearch.jsp页面打开的是同一个窗口,只是显示的内容不一样罢了。
现在要理解好窗口的概念,和页面是不一样的,一个窗口可能代表多个页面。
本例子的实质:用javascript在不同页面之间传值。
首先在proTypeSearch.jsp页面里,通过后台的业务逻辑方法,把想要传的值检索出来,并在页面里获得这个值,
然后关闭当前窗口,调用closewin()方法,在这个方法内部掉用父窗口的choose方法,并把想要传的值,传递给
choose方法,之后在父窗口的页面里的choose方法内接收传递过来的值。--就是这个过程!
注意:本例中proTypeSearchi.jsp页面里的closewin();方法可以去掉,因为proTypeSearch.jsp页面里的closewin()方法调用的是
proSpecAdd.jsp页面里的choose方法,但proTypeSearch.jsp页面里的closewin()方法和proSpecAdd.jsp页面里的choose方法,去掉哪个,这个传值都不能成功。
注意:本例中最应该注意的就是窗口的概念!!