问一个关于struts中的action里的问题

在struts的action里面,
通常我们使用HttpServletRequest request的方法
request.getParameterValues来得到JSP页面中的多选.

我想问一下,request.getParameterNames();可以得到页面JSP中所有的字段,杂个知道每一个在页面是单选,还是多选,还是text还是......?

就是HttpServletRequest 包装了页面中控件类型的信息了吗?

或者从ActionForm里得到也行...

14个回答

其实这个问题不用你操心的,你用了struts的话,Struts专门有这样的拦截器去封装你的页面提交的参数值,比如说Checkbox吧,就有CheckBoxInterceptor这样的拦截器,专门封装,用的都是Map,你可以借鉴一下,引用[quote]有Servlet API 可以看出,如果你不知道 这个元素对应的 单个值还是集合值的话, 你可以统一使用 getParameterValues 来获取元素的对应内容

[/quote]

从HTTP报文的实体部分考虑。

HTTP传送的是 key=vlaue的数据。其中,key是Form元素的名称,value是这个元素的值。

没有关于 form元素类型的说明。所以不能得到除key 、value外的额外信息。

这个就是由http协议来定义的

HttpServletRequest只是解析符合http协议的消息头和内容体

[b][size=medium]
String[] getParameterValues(String name)[/size]

Returns an array of String objects containing all of the values the given request parameter has, or null if the parameter does not exist.
If the parameter has a single value, the array has a length of 1. [/b]
[color=blue][b]
有Servlet API 可以看出,如果你不知道 这个元素对应的 单个值还是集合值的话, 你可以统一使用 getParameterValues 来获取元素的对应内容[/b][/color]

[quote]我想问一下,request.getParameterNames();可以得到页面JSP中所有的字段,杂个知道每一个在页面是单选,还是多选,还是text还是......? [/quote]

UI层区分了单选和多选,但是发送http请求的时候,应该就没有这个信息了。

比如:

  • 如果是text, 就是一个 name=value传到服务器
  • 如果是单选, 就是有一个 radioname=value传到服务器,value是各个radio中你选中的radio的值
  • 如果是多选,就是有多个 chkname=value1&chkname=value3 传到服务器

总之,传到服务器,应该不知道你传过来的是单选还是多选,那时UI的事情,你只能通过参数进行判断。

[b]样例如下:[/b]

[b]name=Hello&duoxuan=b&duoxuan=c[/b]
[b]
如果是多个选项同一个名字的话,这在HTTP报文的实体部分,该选项是key=value1&key=valu2的方式,连续出现!...[/b]

知道有这个方法request.getParameterValues("paramName");
但是好象没有request.getParameterValues();
如果你知道表单参数名字为什么不直接用参数名取获取那?如果不知道你可以先获取参数名,然后再根据参数名一个一个去获取所有参数的值,你可以全部使用request.getParameterValues("paramName");方法,如果有多个值,那么肯定是复选,单个值那么就是单选或者输入框之类了

[b]
难到 要给前台每一个字段,加上一个隐藏字段,来说明 某个Form元素的类型?(最好不要吧?)

你以前写的已经很不错了![/b]

这一层都被http协议屏蔽掉了,单纯想从请求参数来判断是不太可能的,

只有你自己定义一些规则,比如名字前缀或后缀之类的,

[quote]而页面的多选经常变.[/quote]
不管怎么变,提交表单的时候肯定是固定的,可以再提交表单的时候调用一个JS;
处理这个checkbox,不一定非要在后台处理

共14条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问