Struts2将s:select标记中的所有值加载到动作类中的HashMap中

时间:2012-03-15 08:39:22

标签: forms struts2 hashmap populate

我对这个话题进行了充分的研究,没有运气: - (

我的要求是从具有s:select标记的jsp表单加载在action类中声明的HashMap。

这是我的动作类

public class AttributeAction extends ActionSupport {
    private HashMap<String, String> lstAttrTypesHashMap;
    public void setLstAttrTypesHashMap(HashMap<String, String> lstAttrTypesHashMap) {
        this.lstAttrTypesHashMap = lstAttrTypesHashMap;
    }

    public HashMap<String, String> getLstAttrTypesHashMap() {
        return lstAttrTypesHashMap;
    }

    public String renderPageAction() {
        lstAttrTypesHashMap.put("ENTRY1", "VALUE1");
        lstAttrTypesHashMap.put("ENTRY2", "VALUE2");
        lstAttrTypesHashMap.put("ENTRY3", "VALUE3");
        return SUCCESS;
    }

    public String searchAction() {
        logger.info("***************************************");
        logger.info("searchAction Started ...");
        logger.info("a.getType() = [" + a.getType() + "]");
        logger.info("getLstAttrTypesHashMap() = [" + getLstAttrTypesHashMap() + "]");
        return SUCCESS;
    } 
}

这是我如何在jsp中显示下拉

<s:select 
  key="a.type" 
  label="Select Object Type" 
  name="a.type" 
  list="lstAttrTypesHashMap" />

这是struts.xml

<action name="attributeSearch" method="searchAction" class="com.frk.gid.action.AttributeAction">
    <result name="success">/AttributeResult.jsp</result>
    <result name="input">/AttributeInput.jsp</result>
</action>
    <action name="attributeRender" method="renderPageAction" class="com.frk.gid.action.AttributeAction">
    <result name="success">/AttributeInput.jsp</result>
</action>

当上面的jsp加载时,我可以看到下拉列表已填充。但是,当我将其提交回动作时,我只能看到所选值(a.type)。 hashmap恰好为null。为了加载这个HashMap,还有什么我需要做的吗?我的理解是Struts2会自动从提交下拉列表中加载HashMap - 显然不是......感谢任何输入!!!!

1 个答案:

答案 0 :(得分:0)

非常感谢您的回复!

最后我决定通过传递隐藏变量,它就像一个魅力。

另外,我有像Map&gt;这样的复杂类型,我不得不编写自己的Type Converter来转换为String。