[英]Populating Action class instance variables from URL in Struts2
Facing an issue with passing values from my html form to action class. 将值从我的html表单传递到操作类时遇到问题。 Created a sample project to test the functionality and have the same issue here.
创建了一个示例项目来测试功能,并在此处遇到相同的问题。 I have the following classes:
我有以下课程:
package com.struts2test.beans;
public class TestBean {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
package com.struts2test.beans;
import java.util.List;
import java.util.Map;
public class TestBeanHolder {
private Map<Integer, TestBean> testBeanMap;
private List<TestBean> testBeanList;
private Map<Integer, List<TestBean>> testBeanListMap;
public Map<Integer, TestBean> getTestBeanMap() {
return testBeanMap;
}
public void setTestBeanMap(Map<Integer, TestBean> testBeanMap) {
this.testBeanMap = testBeanMap;
}
public Map<Integer, List<TestBean>> getTestBeanListMap() {
return testBeanListMap;
}
public void setTestBeanListMap(Map<Integer, List<TestBean>> testBeanListMap) {
this.testBeanListMap = testBeanListMap;
}
public List<TestBean> getTestBeanList() {
return testBeanList;
}
public void setTestBeanList(List<TestBean> testBeanList) {
this.testBeanList = testBeanList;
}
}
package com.struts2test.action;
import com.opensymphony.xwork2.ActionSupport;
import com.struts2test.beans.TestBeanHolder;
public class TestAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private TestBeanHolder testBeanHolder;
public TestBeanHolder getTestBeanHolder() {
return testBeanHolder;
}
public void setTestBeanHolder(TestBeanHolder testBeanHolder) {
this.testBeanHolder = testBeanHolder;
}
public String execute() throws Exception {
return SUCCESS;
}
}
When my url is http://localhost:8080/Struts2Test/test?testBeanHolder.testBeanMap[0].value=1
, testBeanHolder.testBeanMap
of my action gets populated with key of 0
mapping to a TestBean
instance with value=1
. 当我的网址是
http://localhost:8080/Struts2Test/test?testBeanHolder.testBeanMap[0].value=1
,我的操作的testBeanHolder.testBeanMap
填充了0
键,映射到value=1
的TestBean
实例。
When the url is http://localhost:8080/Struts2Test/test?testBeanHolder.testBeanList[0].value=1
, testBeanHolder.testBeanList
gets populated with single instance of TestBean
with value=1
. 当url为
http://localhost:8080/Struts2Test/test?testBeanHolder.testBeanList[0].value=1
, testBeanHolder.testBeanList
会填充单个value=1
的TestBean
实例。
I am try to populate testBeanListMap
property of testBeanHolder
and doesn't work. 我尝试填充
testBeanListMap
财产testBeanHolder
并不起作用。 The testBeanListMap
is created but empty. testBeanListMap
已创建,但为空。 Here is the URL I am trying http://localhost:8080/Struts2Test/test?testBeanHolder.testBeanListMap[0][0].value=1
这是我正在尝试使用的URL
http://localhost:8080/Struts2Test/test?testBeanHolder.testBeanListMap[0][0].value=1
Here is the code which worked, adding modified classes: 这是起作用的代码,添加了修改后的类:
package com.struts2test.beans;
import java.util.List;
public class TestBeanListHolder {
private List<TestBean> testBeans;
public List<TestBean> getTestBeans() {
return testBeans;
}
public void setTestBeans(List<TestBean> testBeans) {
this.testBeans = testBeans;
}
}
package com.struts2test.beans;
import java.util.List;
import java.util.Map;
public class TestBeanHolder {
private Map<Integer, TestBean> testBeanMap;
private List<TestBean> testBeanList;
private Map<Integer, TestBeanListHolder> testBeanListMap;
public Map<Integer, TestBean> getTestBeanMap() {
return testBeanMap;
}
public void setTestBeanMap(Map<Integer, TestBean> testBeanMap) {
this.testBeanMap = testBeanMap;
}
public Map<Integer, TestBeanListHolder> getTestBeanListMap() {
return testBeanListMap;
}
public void setTestBeanListMap(
Map<Integer, TestBeanListHolder> testBeanListMap) {
this.testBeanListMap = testBeanListMap;
}
public List<TestBean> getTestBeanList() {
return testBeanList;
}
public void setTestBeanList(List<TestBean> testBeanList) {
this.testBeanList = testBeanList;
}
}
http://localhost:8080/Struts2Test/test?testBeanHolder.testBeanListMap[1].testBeans[0].value=somevalue
The url http://localhost:8080/Struts2Test/test?testBeanHolder.testBeanListMap[0][0].value=1
won't work because you are using wrong parameter name. url
http://localhost:8080/Struts2Test/test?testBeanHolder.testBeanListMap[0][0].value=1
无效,因为您使用了错误的参数名称。 Thus testBeanHolder.testBeanListMap[0][0].value
is a name of the parameter that maps to the object which has a property of complex type (collection of collections). 因此,
testBeanHolder.testBeanListMap[0][0].value
是映射到对象的参数名称,该对象具有复杂类型的属性(集合的集合)。 Struts2 can't handle such scenarios, . Struts2无法处理这种情况。 But you can wrap a second collection with an object and use a collection of objects.
但是,您可以使用对象包装第二个集合并使用对象的集合。 The name would change to
testBeanHolder.testBeanListMap[0].object[0].value
. 名称将更改为
testBeanHolder.testBeanListMap[0].object[0].value
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.