在struts的action里面,
通常我们使用HttpServletRequest request的方法
request.getParameterValues来得到JSP页面中的多选.
我想问一下,request.getParameterNames();可以得到页面JSP中所有的字段,杂个知道每一个在页面是单选,还是多选,还是text还是......?
就是HttpServletRequest 包装了页面中控件类型的信息了吗?
或者从ActionForm里得到也行...
其实这个问题不用你操心的,你用了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请求的时候,应该就没有这个信息了。
比如:
总之,传到服务器,应该不知道你传过来的是单选还是多选,那时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,不一定非要在后台处理
你用不同的名字区分,标识是多选还是单选。
比如含有single字符的是单选,含有mutil字符的是多选。
[code="java"]Enumeration names = request.getParameterNames();
foreach(String str names){
if(str.contains("single")){
//处理单选
}else if(str.contains("mutil")){
//处理多选
}
}
[/code]
[quote]我为会径流选择使用js呢. [/quote]这里不需要使用到任何javascript~~
[code="java"]
String[] values = request.getParameterValues(fieldName);
StringBuffer fieldValue = new StringBuffer();
int cx = 0;
for (String string : values) {
cx++;
if (1 == cx)
fieldValue.append(string);
else
fieldValue.append("|" + string);
} [/code]
改成这样试试:
[code="java"]
String[] values = request.getParameterValues(fieldName);
// 得出的结果可能和你“|”分开的样式不一样。但是比较方便。
String fieldValue = Arrays.toString(values);
[/code]
[quote]因为,我认为js往往是有BUG时,某一行出问题后,后面的代码就都不运行了... [/quote]
用用jquery