从Struts JSP内部的会话中获取映射值

时间:2019-03-28 07:17:15

标签: java jsp struts2

我在JSP中有一个会话变量(它是一个map结构为Map<String,ArrayList<String>>)的会话变量。 当我在控制台中打印值时 <%System.out.println("Session Value "+session.getAttribute("PRODUCTTYPESTEMP"));%>将在控制台中打印整个值。 我只想通过传递所需的ArrayList来获得key值,并用check box打印出来。 我不确定该怎么做。 顺便说一句,我对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“购物篮”相关的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

2 个答案:

答案 0 :(得分:1)

我不确定我是否完全了解您,但是在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']"/>

答案 1 :(得分:0)

我正在粘贴确切的代码,这符合我的要求, 希望这会帮助一些可怜的人。 这是基于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>