将 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>
这是我的 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>