jsp中id ,name 我的小小认识

        ------------------------------------我先总结后详细说明-------------------------------------------
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以保证不出现意向不到的乱子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值