2013-01-23 97 views
3

我想声明一个动作,以便我可以传递String静态参数数组。我想下面的代码:Struts 2:将字符串数组作为静态参数传递

<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"

就是我想要可能吗?如果是的话,那么这样做的正确方法是什么?

回答

3

struts静态参数像MAP一样工作。名称是KEY并且值为VALUE。 您可以通过以逗号分隔的值发送值来实现您的要求,并且可以将其拆分,以便您可以在此处放置阵列。

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

For more info on Static Parameters

+0

对不起,我删除了我的意见,因为我认为这将自动分割成数组。我最初想到了这个解决方案,但如果有一个合理的解决方案,那会更好。我仍然在等待某个可能知道答案的人,如果没有的话,我会后退到这。 – Macchiato

+0

@Macchiato我的回答如何? –

0

尝试经由其中的参数被定义为Map<String,String>的动作配置由staticParams拦截器处理此

<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

感谢您的快速回复,但此代码无效。它给了我一个具有单个值的数组“new java.lang.String [] {'name1','name2','name3'}”它没有分割成3个项目的数组。 – Macchiato

0

的静态参数。

你可以看到在行动的配置使用静态parametesr的例子:Configure static parameter for Action class

对于动作的配置正确使用静态参数,你应该包括拦截staticParams参考或使用defaultStack

你还包括setParams(Map<String,String> params)在action中给拦截器设置参数的值。在你的情况下使用不同的键name1, name2, name3来检索地图的值。您也可以尝试使用overwrite属性(未记录),以使用相同的密钥不会覆盖该值。

1

AFAIK静态参数被转换成字符串,即为什么不同拦截器(例如FileUploadInterceptor)使用静态方法的TextParseUtilcommaDelimitedStringToSetString转换为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[]">name1</param> 
      <param name="names[]">name2</param> 
      <param name="names[]">name3</param> 
     </action> 
相关问题