日期:2014-05-17  浏览次数:20751 次

关于给Struts的Html link标签的action(或者page、href)属性设置多个动态参数的解决办法

相信大家对于Struts 1.x中的html:link标签非常熟悉。一般的使用方法是这样子的:

  1. LinkObject?linkObject??=?new?LinkObject(); ??
  2. linkObject.setName("monoxide"); ??
  3. request.setAttribute("linkObject",linkObject); ??
  4. ??
  5. ? < html:link href="test.jsp" paramName="linkObject" paramId="realName" paramProperty="name" paramScope="request">测试 Object< /html:link>


    ??

这个表示方法是:

从request中取出linkObject的name的值,然后以realName的参数形式加到test.jsp后面,最后生成的代码看起来是这个样子:test.jsp?realName=monoxide

这种方法虽然简单,但是有一个缺陷。那就是只能从linkObject中取出一个值来,如果想取2个或者2个以上属性追加到参数后面,该方面就无能为力了。

在研究了struts html link源代码后,发现有个name属性可以利用,但是该属性的值只能放置map类型的对象,而不能放置普通的Object。代码如下:

java 代码

?

  1. Map?map?=?new?HashMap(); ??
  2. map.put("name","一氧华碳"); ??
  3. map.put("email","monoxide@gmail.com"); ??
  4. request.setAttribute("map",map); ??
  5. ??
  6. ?? < html:link href="test.jsp" name="map" useLocalEncoding="true">测试 Map< /html:link>
    ?

?

?最后生成的Link:test.jsp?email=monoxide%40gmail.com&name=%D2%BB%D1%F5%BB%AA%CC%BC

特别注意:useLocalEncoding 该属性如果为true,则以系统的编码来urlencode。如果为false,则以utf-8的编码。默认为false

完整测试代码见附件!

如果没有特别注明,本Blog文章岂为原创。

转贴请注明出处:??? http://netbus.iteye.com