我正在尝试使用HashMap在JSP中使用Struts2创建网格。我能够使用我在HashMap中填充的值加载页面,但是当我提交它时,HashMap没有回到action方法(我得到一个NullPointerException试图访问HashMap)。有人能告诉我我做错了什么吗?我在JSP中所做的是正确的吗?
我的行动方法(加载和提交): -
public class HashMapGridAction extends ActionSupport{
private static final long serialVersionUID = 1L;
static Logger logger = Logger.getLogger(HashMapGridAction.class);
private HashMap<String, TestObject> hashMap;
public String load() {
this.hashMap = new HashMap<String, TestObject>();
TestObject testObject1 = new TestObject();
testObject1.setCode("A");
testObject1.setDescription("Alphabet A");
this.hashMap.put("A", testObject1);
TestObject testObject2 = new TestObject();
testObject2.setCode("B");
testObject2.setDescription("Alphabet B");
this.hashMap.put("B", testObject2);
TestObject testObject3 = new TestObject();
testObject3.setCode("C");
testObject3.setDescription("Alphabet C");
this.hashMap.put("C", testObject3);
return SUCCESS;
}
public String submit() {
//This is where I get the NullPointerException
Iterator<String> iter = this.hashMap.keySet().iterator();
while (iter.hasNext()){
String key = iter.next();
logger.debug("Key : " + key);
logger.debug("Code: " + this.hashMap.get(key).getCode());
logger.debug("Description: " + this.hashMap.get(key).getDescription());
}
return SUCCESS;
}
public HashMap<String, TestObject> getHashMap() {
return hashMap;
}
public void setHashMap(HashMap<String, TestObject> hashMap) {
this.hashMap = hashMap;
}
}
HashMap(TestObject)上的值对象: -
public class TestObject {
private String code;
private String description;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
JSP: -
<s:form action="hashMapGridSubmit">
<table>
<s:iterator value="hashMap" var="testObject">
<tr>
<s:hidden name="hashMap[%{key}].code" value="%{value.code}"></s:hidden>
<td><s:property value="%{value.code}" /></td>
<td><s:textfield theme="simple"
name="hashMap[%{key}].description" value="%{value.description}" /></td>
</tr>
</s:iterator>
</table>
<s:submit theme="simple" value="Submit" />
</s:form>
Struts.xml: -
<action name="hashMapGridLoad" class="com.dowill.struts2.hashmap.HashMapGridAction" method="load">
<result name="success">/hashmap/hashmapgrid.jsp</result>
</action>
<action name="hashMapGridSubmit" class="com.dowill.struts2.hashmap.HashMapGridAction" method="submit">
<result name="success">/hashmap/hashmapgrid.jsp</result>
</action>
谢谢!
答案 0 :(得分:1)
您错过了'
:
<s:hidden name = "hashMap['%{key}'].code"
value = "%{value.code}" />
<s:textfield name = "hashMap['%{key}'].description"
value = "%{value.description}" />
还将HashMap声明为Map:
private Map<String, TestObject> hashMap;