关于Struts2.5版本的ActionContext.getContext().getParameter()方法出现的问题

关于Struts2.5版本的ActionContext.getContext().getParameter()的返回值的问题

最近, 我开始学习struts2了, 有点小激动, 毕竟开始学新知识了, 然后自然而然就碰到了一些问题, 就比如标题上说的

我们要获取请求参数对应的Map时,在struts2.3中是这样的

Map<String, Object> parameters = ActionContext.getContext().getParameters();

题外话

讲句题外话, getParameter() 这个方法返回的是一个 Map<String, Object> 对象, 但我一直在想返回一个 Map<String, String[]> 对象是不是看起来更加好一点, 我相信很多人(尤其是初学者), 在获取这个Map<String, Object>对象之后, 打印其中的请求参数时, 直接有意无意的就把这个Object对象当成了String对象了

比如, 我转发一个请求

http:localhost:8080/struts2_war_exploded/TestActionContext.action?name=DeepClouds

我们想获取这个请求里的name参数, 那么有的人就直接这样写

Map<String, Object> parameters = ActionContext.getContext().getParameters();
System.out.println(parameters.get("name"));// 错误

然后打印值就是[Ljava.lang.String@地址值], 而不是预期的"DeepClouds"
有的人不理解为什么不是String, 举个例子, 还是转发一个请求

http:localhost:8080/struts2_war_exploded/TestActionContext.action?name=Deep&name=Clouds

这个时候, 一个String怎么装两个name?所以肯定是String[]

可能有大佬看我这篇文章, 千万别喷我😂, 我也还在学习中, 不过你要是知道为什么返回Object而不是String[]的话, 请告诉我一下, 谢谢哥哥姐姐弟弟妹妹🙂

正文来了

返回正题, 我要说的是, 这样写👇

Map<String, Object> parameters = ActionContext.getContext().getParameters();

在用struts2.5时是会报错的, 编译时就会报错!!!
报错
struts2.5中, getParameters()这个方法返回值是一个HttpParameters对象, 这个类是实现Map<String, parameter> 的, 所以有的人可能会说了, 那为什么会报错呢?不是可以向上类型转换吗?

其实这个HttpParameters对象还实现了Cloneable接口, 当时给我想了半天, 上百度查也没查出个所以然来(可能是我太菜了😭), 后来看了源码才发现的

那么怎么用呢?还是这个请求

http:localhost:8080/struts2_war_exploded/TestActionContext.action?name=Deep&name=Clouds

HttpParameters parameters = ActionContext.getContext().getParameters();
Parameter parameter = parameters.get("name");

System.out.println(parameter.isMultiple());// true
System.out.println(parameter.getValue());// Deep
System.out.println(Arrays.toString(parameter.getMultipleValues()));// [Deep, Clouds]

例举其中的几个方法

  • 1.isMultiple(): 判断这个parameter对象里是否有多个对应的value
  • 2.getValue(): 得到parameter里的第一个value
  • 3.getMultipleValues(): 得到装有全部value的一个String数组
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值