如何在JSP中访问Java Map变量

时间:2014-05-14 06:31:22

标签: jsp map struts2

我在prepare Method中定义了Action Class中的Map变量,我需要在JSP Scriptlet中循环遍历这个Map变量来获取键和值。但我要在JSP中获取此Map变量。有没有办法直接在JSP中获取Map对象,即从Action Class到JSP Scriptlet ????

以下是我的准备方法:

@Override
public void prepare() throws Exception {
 securityMenu = new HashMap<String,String>();
 securityMenu.put("userGroupMaster","Group Master");
 securityMenu.put("userProfileMaster","Profile Master");
 securityMenu.put("userTypeMaster","User Type Master");
}

我想在JSP Scriptlet中使用这个securityMenu,如:

for(Map.Entry<String, String> map : securityMenu.entrySet()){
    out.println( "eLK('e1d1L1','i','"+map.getValue()+"','"+map.getKey()+"');");
}

任何帮助对我都有很大的帮助

2 个答案:

答案 0 :(得分:1)

首先确保您拥有getSecurityMenu()方法。

接下来你可以在jsp中找到它:

<s:iterator value="securityMenu">
    <s:property name="key"/>
    <s:property name="value"/>
</s:iterator>

如果地图位于名为securityMenu的会话中,您可以执行以下操作:

<s:iterator value="#session.securityMenu">
    <s:property name="key"/>
    <s:property name="value"/>
</s:iterator>

编辑: 为此,您的页面必须声明以下Struts2 taglib:

<%@ taglib prefix="s" uri="/struts-tags"%>

答案 1 :(得分:0)

你可以像scriptlet中的普通javacode那样做。

for (Map.Entry<String, String> entry : securityMenu.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
}

然而 scriptlets (JSP文件中的原始Java代码,那些<% %>内容)被认为是一种不好的做法。我建议安装JSTL(只需删除/WEB-INF/lib中的JAR文件,并在JSP中声明所需的taglibs-3)。它有一个标签,可以迭代其他Map s。每次迭代都会为您提供Map.Entry后退,而后者又有getKey()getValue()方法。

这是一个基本的例子:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:forEach items="${securityMenu}" var="entry">
    Key = ${entry.key}, value = ${entry.value}<br>
</c:forEach>