Struts2:使用HashMap进行网格输入

时间:2014-04-17 15:41:26

标签: jsp struts2 hashmap

我正在尝试使用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>

谢谢!

1 个答案:

答案 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;