从Struts JSP中的会话中获取Map值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Struts JSP中的会话中获取Map值相关的知识,希望对你有一定的参考价值。

我有一个会话变量(它是一个map,结构为Map<String,ArrayList<String>>)在JSP中。当我在控制台中打印像<%System.out.println("Session Value "+session.getAttribute("PRODUCTTYPESTEMP"));%>这样的值时,它会在控制台中打印整个值。我想要的是通过传递所需的ArrayListkey并用check box打印。我不知道该怎么做.BTW我不熟悉strutsJSP。非常感谢任何帮助。

供参考,下面是现有的一段代码(请忽略,如果它令人困惑,请提供一种方法来实现上述功能) - 如果session返回ArrayList,我将尝试通过传递所需的map重写它key

<input type="checkbox" id="warrantsCb2"/><span></span></label><label for="warrantsCb" style="font-size:12px"><b>Warrants</b></label>
    	<ul class="nested">
    	<li>
    		<label><input type="checkbox" /><span></span></label>Warrants
    	</li>
    	<% colCntr=0; %> 						
    	<s:iterator var="product_types"  value="#session['PRODUCTTYPESTEMP']">
    	<li>
    	<label>
    	<input type="checkbox" id="productTypeCodesTemp" name="productTypeCodesTemp" value="<s:property value="#product_types_temp.value"/>"
    	<s:iterator var="productTypeTemp" value="#attr['productTypeCodesTemp']">
    	<s:if test="%{#attr['productType']==#product_types.value}"> checked="checked" </s:if> 
    	</s:iterator>/>
    	<span></span></label>
    		<s:property value="#product_types.label"/> 
    	</li>
    	</s:iterator>
    	</ul>

编辑 - 在Madis R的帮助下添加了新代码

<li class="caret">
	<input type="checkbox" id="warrantsCb" checked="checked" /><label>
	<input type="checkbox" id="warrantsCb2"/><span></span></label><label for="warrantsCb" style="font-size:12px"><b>Warrants</b></label>
	<s:iterator value="#session['PRODUCTTYPESTEMP']"> 
    <s:property value="Baskets"/> 
    <s:checkboxlist name="checkboxes" list="value"/> 
	</s:iterator>
</li>

以上是用复选框打印所有值。我只需要选择与ArrayList“Baskets”相关的key

编辑:实施最新解决方案后,正在获取值但复选框不可用。我应该像屏幕截图中的“未知”和代码一样对齐Warrant

<td style="text-align:left;vertical-align:top;padding:0">
	<div class="acidjs-css3-treeview">
	    <ul>
			<li class="caret">
			<input type="checkbox" id="warrantsCb" checked="checked" /><label>
			<input type="checkbox" id="warrantsCb2"/><span></span></label><label for="warrantsCb" style="font-size:12px"><b>Warrants</b></label>
				<s:checkboxlist name="checkboxes" list="#session['PRODUCTTYPESTEMP']['Baskets']"/>
			</li>
		</ul>
	</div>
</td>

enter image description here

答案

我不完全确定我理解你,但在struts 2中你可以通过在你的动作中实现接口SessionAware或从ActionContext ActionContext.getContext().getSession()获取它来访问会话。没有必要直接将java代码编写到jsp中

要从会话中获取数据,您可以在jsp中尝试:

<s:iterator value="#session['PRODUCTTYPESTEMP']['Baskets']"> // iterates over list with map key Baskets
    <div>
        <s:property/> // gets element from Baskets
    </div>
</s:iterator>

编辑:试试这个,它从关键篮子的地图获取列表,并创建值为的复选框:<s:checkboxlist name="checkboxes" list="#session['PRODUCTTYPESTEMP']['Baskets']"/>

另一答案

我正在粘贴确切的代码,这符合我的要求,希望这将有助于一些可怜的灵魂。这是基于Madis R提供的解决方案

<ul class="nested">
	<s:iterator value="#session['PRODUCTTYPESTEMP']['Certificates']">		     
           <%--Certificates is the key we are passing into the map--%>								
	<li> 
        <label><input type="checkbox" /><span></span></label><s:property/>           								
	</li>										
	</s:iterator>
 </ul>

以上是关于从Struts JSP中的会话中获取Map值的主要内容,如果未能解决你的问题,请参考以下文章

struts2 获取表单数据封装到list和map集合

JSP+Struts:处理 AJAX 调用中的会话超时

用struts2标签在jsp页面中取得list的第一个元素

jsp页面使用el 按key获取map中的对应值

struts2 jsp如何获取action值

[原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map(代码片