我在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()+"');");
}
任何帮助对我都有很大的帮助
答案 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>