在 Struts 2 中将字符串数组作为静态参数传递

问题描述 投票:0回答:5

我想以这样的方式声明一个动作,以便我可以传递

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"

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

arrays string parameters static struts2
5个回答
3
投票

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

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

有关静态参数的更多信息


1
投票

AFAIK 静态参数被转换为 String,这就是为什么各种拦截器(例如

FileUploadInterceptor
)使用
commaDelimitedStringToSet
的静态方法
TextParseUtil
String
转换为
Set<String>
。您可以在属性的 setter 内部调用此方法。

public void setNames(String name) {
    mNames = TextParseUtil.commaDelimitedStringToSet(name);
}

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>

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>

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配置中看到使用静态参数的示例:为Action类配置静态参数

© www.soinside.com 2019 - 2024. All rights reserved.