------------------------------------我先总结后详细说明-------------------------------------------
1,在脚本中直接以id(而不是name)引用该id标识的对象。
例如 <input type="hidden" id="cp" name="cp" value="1">
要在脚本中获得输入的内容 id="cp" , 支持这句:document.getElementById("cp").value = num ;
2,此外浏览器会根据name来设定发送到服务器的request。因此如果用id,服务器是无法得到数据的。
name="cp"支持这句:currentPage = Integer.parseInt(request.getParameter("cp")) ;
所以最好控件同时注上 id和name以保证不出现意向不到的乱子
在实训周研究李兴华的《java web实战开发经典》中的案例代码,如何实现翻页操作时,发现一个很奇怪的现象:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%-- 包含以下的内容即可完成分页
<jsp:include page="split_page_plugin.jsp">
<jsp:param name="allRecorders" value="<%=allRecorders%>"/>
<jsp:param name="url" value="<%=URL%>"/>
</jsp:include>
--%>
<%
int currentPage = 1 ; // 为当前所在的页,默认在第1页
int lineSize = 3 ; // 每次显示的记录数
long allRecorders = 0 ; // 表示全部的记录数
long pageSize = 1 ; // 表示全部的页数(尾页)
int lsData[] = {1,3,5,7,9,10,15,20,25,30,50,100} ;
String keyWord = request.getParameter("kw") ; // 接收查询关键字
String url = request.getParameter("url") ;
%>
<%
try{
currentPage = Integer.parseInt(request.getParameter("cp")) ;
System.out.println("split_page_plugin.JSP中的currentPage为: " + currentPage) ;
} catch(Exception e) {}
try{
lineSize = Integer.parseInt(request.getParameter("ls")) ;
System.out.println("split_page_plugin.jsp中的lineSize为:" + lineSize ) ;
} catch(Exception e) {}
try{
allRecorders = Long.parseLong(request.getParameter("allRecorders")) ;
System.out.println("split中jsp接受记录数为:" + allRecorders ) ;
} catch(Exception e) {}
if(keyWord == null){
keyWord = "" ; // 如果模糊查询没有关键字,则表示查询全部
}
%>
<%
pageSize = (allRecorders + lineSize -1) / lineSize ;
if(pageSize == 0){
pageSize = 1 ;
}
%>
<script language="javascript">
function go(num){
alert("currentPage:" + num);
document.getElementById("cp").value = num ;
document.spform.submit() ; // 表单提交
}
</script>
<form name="spform" action="<%=url%>" method="post">
输入查询关键字:<input type="text" name="kw" value="<%=keyWord%>">
<input type="submit" value="查询"><br>
<input type="button" value="首页" οnclick="go(1)" <%=currentPage==1?"DISABLED":""%>>
<input type="button" value="上一页" οnclick="go(<%=currentPage-1%>)" <%=currentPage==1?"DISABLED":""%>>
<input type="button" value="下一页" οnclick="go(<%=currentPage+1%>)" <%=currentPage==pageSize?"DISABLED":""%>>
<input type="button" value="尾页" οnclick="go(<%=pageSize%>)" <%=currentPage==pageSize?"DISABLED":""%>>
跳转到第<select name="selcp" οnchange="go(this.value)">
<%
for(int x=1;x<=pageSize;x++){
%>
<option value="<%=x%>" <%=x==currentPage?"SELECTED":""%>><%=x%></option>
<%
}
%>
</select>页
每页显示
<select name="ls" οnchange="go(1)">
<%
for(int x=0;x<lsData.length;x++){
%>
<option value="<%=lsData[x]%>" <%=lsData[x]==lineSize?"SELECTED":""%>><%=lsData[x]%></option>
<%
}
</select>
条
<input type="hidden" name="cp" value="1"> <!-- 我后来加入:id="cp" -->
</form>
----------------------------------问题来了,李兴华的视频中,单击一下控件都是成功刷新页面的,但我的只有“搜索”控件具有刷新页面的功能----------------------------------------
单击 一下的任何一个按钮 会触发 javascript中的go()方法,但是页面始终没有刷新,只有点击 “搜索”才会刷新页面
try{
currentPage = Integer.parseInt(request.getParameter("cp")) ;
System.out.println("split_page_plugin.JSP中的currentPage为: " + currentPage) ;
} catch(Exception e) {}
try{
lineSize = Integer.parseInt(request.getParameter("ls")) ;
System.out.println("split_page_plugin.jsp中的lineSize为:" + lineSize ) ;
} catch(Exception e) {}
try{
allRecorders = Long.parseLong(request.getParameter("allRecorders")) ;
System.out.println("split中jsp接受记录数为:" + allRecorders ) ;
} catch(Exception e) {}
-----------------------------------------------------------------
当我单击:“搜索”,页面刷新,后台也输出了
System.out.println("split_page_plugin.JSP中的currentPage为: " + currentPage) ;
System.out.println("split_page_plugin.jsp中的lineSize为:" + lineSize ) ;
System.out.println("split中jsp接受记录数为:" + allRecorders ) ;
--------------------------------------------------------------------------------------
说明一下控件没有成功提交表单:
<script language="javascript">
function go(num){
alert("currentPage:" + num);
document.getElementById("cp").value = num ;---------------------------------------------->>>>问题就出现在这里,这句可能是无效的,导致表单没有提交,但也没报错
document.spform.submit() ; // 表单提交
}
</script>
对应的控件: <input type="hidden" id=“cp” name="cp" value="1">
我在上句加入:id=“cp” :
<input type="hidden" id=“cp” name="cp" value="1">
功能完全实现了,单击任何控件页面都会刷新,之前后台没有输出的也都输出了
我试着删掉:name="cp"
除了“每页显示x条”正常,“下一页,上一页,首页,尾页”页面跳转失效:
后台输出:System.out.println("split_page_plugin.jsp中的lineSize为:" + lineSize ) ;
System.out.println("split中jsp接受记录数为:" + allRecorders ) ;
----------------------------------------------------------------------------
唯独:System.out.println("split_page_plugin.JSP中的currentPage为: " + currentPage) ;没有输出
说明一下出现异常,导致跳过输出:
currentPage = Integer.parseInt(request.getParameter("cp")) ;
System.out.println("split_page_plugin.JSP中的currentPage为: " + currentPage) ;
} catch(Exception e) {}
------------------------------------总结-------------------------------------------
1,在脚本中直接以id(而不是name)引用该id标识的对象。例如
<input type="hidden" id="cp" name="cp" value="1">
要在脚本中获得输入的内容 id="cp" , 支持这句:document.getElementById("cp").value = num ;
2,此外浏览器会根据name来设定发送到 服务器的request。因此如果用id,服务器是无法得到数据的。
name="cp"支持这句:currentPage = Integer.parseInt(request.getParameter("cp")) ;
所以最好控件同时注上 id和name以保证不出现意向不到的乱子