4

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"

我想要的可能吗?如果是,正确的做法是什么?

4

5 回答 5

3

struts 静态参数的工作方式类似于 MAP。名称为 KEY,值为 VALUE。您可以通过以逗号分隔的形式发送值来满足您的要求,您可以将其拆分,以便您可以将数组放在那里。

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

有关静态参数的更多信息

于 2013-01-23T07:39:43.923 回答
1

AFAIK 静态参数被转换为字符串,这就是为什么各种拦截器(例如FileUploadInterceptor)使用静态方法转换commaDelimitedStringToSet为. 您可以在 setter 中为您的属性调用此方法。TextParseUtilStringSet<String>

public void setNames(String name) {
    mNames = TextParseUtil.commaDelimitedStringToSet(name);
}
于 2013-01-23T12:14:17.330 回答
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>
于 2013-01-23T07:42:05.060 回答
0

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 config中使用静态参数的例子:Configure static parameter for Action class

于 2013-01-23T11:23:52.120 回答
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>
于 2013-08-05T12:11:37.070 回答