我想以这样的方式声明一个动作,以便我可以传递
String
静态参数数组。我尝试了下面的代码:
<action name="saveRecord" class="saveRecordAction">
<result name="success" type="tiles">tiles:saveRecordSuccess</result>
<param name="names">name1</param>
<param name="names">name2</param>
<param name="names">name3</param>
</action>
我的动作类中有一个二传手:
public void setNames(String[] name){
mNames = name;
}
但我只收到最后一个名字,
"name3"
。
我想要的可能吗?如果是,正确的做法是什么?
struts 静态参数的工作方式类似于 MAP。名称是 KEY,值是 VALUE。 您可以通过发送以逗号分隔的值来实现您的要求,并且您可以将其拆分,以便您可以在那里拥有数组。
<param name="names">name1,name2,name3</param>
AFAIK 静态参数被转换为 String,这就是为什么各种拦截器(例如
FileUploadInterceptor
)使用 commaDelimitedStringToSet
的静态方法 TextParseUtil
将 String
转换为 Set<String>
。您可以在属性的 setter 内部调用此方法。
public void setNames(String name) {
mNames = TextParseUtil.commaDelimitedStringToSet(name);
}
试试这个
<action name="saveRecord" class="saveRecordAction">
<result name="success" type="tiles">tiles:saveRecordSuccess</result>
<param name="names" value="new java.lang.String[]{'name1', 'name2', 'name3'}"></param>
</action>
尝试用名称[]代替名称
<action name="saveRecord" class="saveRecordAction">
<result name="success" type="tiles">tiles:saveRecordSuccess</result>
<param name="names[]">name1</param>
<param name="names[]">name2</param>
<param name="names[]">name3</param>
</action>
staticParams
拦截器通过操作配置处理的静态参数,其中参数定义为Map<String,String>
。
为了在操作配置中正确使用静态参数,您应该包含对拦截器的引用
staticParams
或使用defaultStack
。
<interceptor-ref name="staticParams">
<param name="parse">true</param>
<param name="overwrite">false</param>
</interceptor-ref>
您还可以在拦截器设置参数值的操作中包含
setParams(Map<String,String> params)
。根据您的情况使用不同的键 name1, name2, name3
来检索地图的值。您还可以尝试静态参数的 overwrite
属性(未记录),以免使用相同的键覆盖值。
您可以在action配置中看到使用静态参数的示例:为Action类配置静态参数