我已经对这个话题进行了足够的研究,没有任何运气:-(
我的要求是从具有s:select标记的jsp表单加载一个在操作类中声明的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加载时,我可以看到下拉列表是填充的fine。然而,当我将其提交回操作时,我只能看到选定的值(a.type)。哈希映射恰好为null。我还需要做什么来加载这个HashMap吗?我的理解是Struts2会在提交时自动从下拉列表中加载HashMap——显然不是。。。感谢您的意见!!!!
非常感谢您的回复!
最后,我决定继续传递隐藏的变量,它就像一个魅力。
此外,我有复杂的类型,比如Map>,我必须编写自己的类型转换器来从字符串转换为字符串。