将 url 中的多个参数捕获到 Struts 中的单个数组 2

Capturing multiple parameters in a url to a single array in Struts 2

这是我的 struts.xml class:

<action name="{param1}/{param2}/{param3}" 
        class="myactionclass"  
        method="execute"> 
     <result name="success">/success.jsp</result>
</action>

所以在我的操作 class 中,我必须创建三个 String 对象 String param1, param2, param3(并添加 getter 和 setter 方法)来获取param 个值。我想要做的是,不是创建 3 个不同的字符串对象,而是创建一个字符串数组并使用 setter 将 param 值存储到字符串数组中。

如何在我的行动中实现这一目标 class?

使用查询字符串中的参数在 Struts2 中填充数组非常简单。

在您的 Action 中声明具有相应 setter

的数组
private String[] fruits;

public void setFruits(String[] fruits) {
    this.fruits = fruits;
}

此请求将填充您的 fruits 数组

/myactionuri?fruits=apple&fruits=banana&fruits=peach

但是对于静态参数,此机制似乎无法以相同的方式工作。

我找到了这个解决方案,可能不那么优雅,但它确实有效。 在你的 struts.xml:

<!-- warning: this pattern matches all requests with 3 tokens separated by slashes -->
<action name="*/*/*" class="com.xxx.MyAction" > 
     <param name="f1">{1}</param>
     <param name="f2">{2}</param>
     <param name="f3">{3}</param>
</action>

在您的操作中:

private String[] fruits = new String[3]; //need to be initiated

public void setF1(String f1) {
    this.fruits[0] = f1;
}

public void setF2(String f2) {
    this.fruits[1] = f2;
}

public void setF3(String f3) {
    this.fruits[2] = f3;
}

希望对您有所帮助。

您需要告诉哪个参数将转到数组中的哪个索引。

<action name="{param[0]}/{param[1]}/{param[2]}" class="myactionclass"> 
    <result name="success">/success.jsp</result>
</action>

动作(使用数组):

private String[] param = new String[3];
// getter and setter

您可以使用 List 代替数组,这样就不需要在操作中对其进行初始化。

操作(使用 List):

private List<String> param;
// getter and setter

Map也是一个选项。

操作(使用 Map):

private Map<String, String> param;
// getter and setter

struts.xml(在操作中使用 Map):

<action name="{param['p1']}/{param['p2']}/{param['p3']}" class="myactionclass"> 
     <result name="success">/success.jsp</result>
</action>