我想以这样的方式声明一个动作,即我可以传递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>
我的动作类中有一个setter:
public void setNames(String[] name){
mNames = name;
}
但我只收到一个名字,即最后一个,"name3"
我想要的是什么?如果是的话,这样做的正确方法是什么?
答案 0 :(得分:3)
struts静态参数的工作方式与MAP类似。 name为KEY,值为VALUE。 您可以通过以逗号分隔的方式发送值来实现您的要求,并且可以将其拆分以便可以在那里使用数组。
<param name="names">name1,name2,name3</param>
答案 1 :(得分:1)
AFAIK静态参数转换为String,这就是各种拦截器(例如FileUploadInterceptor
)使用commaDelimitedStringToSet
的静态方法TextParseUtil
将String
转换为Set<String>
的原因。您可以在setter中为您的属性调用此方法。
public void setNames(String name) {
mNames = TextParseUtil.commaDelimitedStringToSet(name);
}
答案 2 :(得分:0)
试试这个
<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>
答案 3 :(得分:0)
staticParams
拦截器通过操作配置处理的静态参数,其中参数定义为Map<String,String>
。
您可以在动作配置中看到使用静态参数的示例:Configure static parameter for Action class
为了在动作配置中正确使用静态参数,您应该包括对拦截器staticParams
的引用或使用defaultStack
。
您还在拦截器的操作中包含setParams(Map<String,String> params)
设置了参数的值。在您的案例中使用不同的键name1, name2, name3
来检索地图的值。您还可以尝试overwrite
属性(未记录)以使静态参数不会使用相同的密钥覆盖该值。
答案 4 :(得分:0)
尝试名字[]而不是名字
<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>