Struts 2:将String数组作为静态参数传递

时间:2013-01-23 07:30:00

标签: arrays string struts2 static param

我想以这样的方式声明一个动作,即我可以传递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"

我想要的是什么?如果是的话,这样做的正确方法是什么?

5 个答案:

答案 0 :(得分:3)

struts静态参数的工作方式与MAP类似。 name为KEY,值为VALUE。 您可以通过以逗号分隔的方式发送值来实现您的要求,并且可以将其拆分以便可以在那里使用数组。

<param name="names">name1,name2,name3</param>

For more info on Static Parameters

答案 1 :(得分:1)

AFAIK静态参数转换为String,这就是各种拦截器(例如FileUploadInterceptor)使用commaDelimitedStringToSet的静态方法TextParseUtilString转换为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>