关于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>   }  974949

我不敢说我可以忘却,或者勇敢,坚强,等等等等一切堂皇而陈旧的字眼。

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

相关文章:

你感兴趣的文章:

标签云: