关于request.getParameter(java.lang.String name)

//前段时间比较忙,好久不写日志了。总结个基础的问题,在Grails中写java代码果然会遭报应,出错了经常没提示...

问题重现:为了便于处理分页,在前端页面添加了一个参数,定义如下:

<input id="pagination" type="hidden" value="0" />

【1】Append数据后,自动更改分页参数:

$('#pagination').val($('#pagination').val() + 10);

通过Ajax传参给后端,进行处理,参数定义如下:

"pagination" : (typeof ($('#pagination')) == "undefined") ? 0:$('#pagination').val(),

【2】Controller中如此处理此参数:

Intege pagination =  request.getParameter("pagination");// input: 0

经验证,上述代码均有问题...

【1】这段的思路是页面每次追加新数据后,自动增加分页参数的值...可是javascript会把这个$('#pagination').val()当成字符串去加...于是第二页可能出现这样的结果:

 

  010

...好吧,前端陷阱就是不少...如下解决方案:

$('#pagination').val(parseInt($('#pagination').val()) + 10);
$('#pagination').val(Number($('#pagination').val()) + 10);

【2】因为servlet里处理页码的方法的参数是整形,所以这里直接用Integer接收了。

 

print("pagination:" + pagination);// pagination:48

 直接输出ASCII值 ...不是我想要的...用一个"-48"? 超出0-9后就会报错的...

找原因...

http://download.oracle.com/otn-pub/jcp/servlet-3_1-fr-spec/servlet-3_1-final.pdf

http://tomcat.apache.org/tomcat-7.0-doc/servletapi/

参见Servlet规范及Tomcat的实现,原来这个request.getParameter()方法返回的是String!

至于为嘛返回48?试试...

    System.out.println((int) '1');//49
    System.out.println((int) '11');//Invalid character constant
    System.out.println((Integer) "1");//Cannot cast from String to Integer
    System.out.println((Integer) "11");//Cannot cast from String to Integer

按理说这个"1"应该报错啊,不应该显示49...参考Tomcat 实现理应是个String的"1"吧,应该编译就有问题啊?没看到哪里转换为'1'...此处有个疑问...

public String getParameter(String name ) {
        handleQueryParameters();
        ArrayList<String> values = paramHashValues.get(name);
        if (values != null) {
            if(values.size() == 0) {
                return "";
            }
            return values.get(0);
        } else {
            return null;
        }
    }

 

 

 

 ____________分割线_  20131121补充_____________________

今天想起那是个Groovy的Controller,测试下,终于明白为嘛1变变成49了,跟容器无关。

groovy>  class HelloWorld  
groovy>  {  
groovy>      static void main(String[] args) {  
groovy>      int a = 'a'; 
groovy>      int b ='1'; 
groovy>      int c = "1"; 
groovy>      println a; 
groovy>      println b; 
groovy>      println c; 
groovy>      } 
groovy>   } 
 
97
49
49

 

 

 

 

 

 

你可能感兴趣的:(java,tomcat,request,servlet,getparameter)