【问题标题】:Fetch Map value from session inside Struts JSP从 Struts JSP 中的会话中获取 Map 值
【发布时间】:2019-03-28 07:17:15
【问题描述】:

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

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

<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>

上面是打印带有复选框的所有值。 我只需要选择与key“篮子”关联的ArrayList

编辑: 实施最新解决方案后,正在获取值,但复选框不可用。我应该在屏幕截图和代码中将 Warrant'Unknown' 对齐

<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>

【问题讨论】:

    标签: java jsp struts2


    【解决方案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>
    

    编辑: 试试这个,它从带有键 Baskets 的地图中获取列表,并创建带有值的复选框: &lt;s:checkboxlist name="checkboxes" list="#session['PRODUCTTYPESTEMP']['Baskets']"/&gt;

    【讨论】:

    • 嗨Madis,我修改了你提到的第9行,现在我得到3个复选框但没有值,3个计数是正确的,因为篮子键有3个值。仍在检查如何获取值.谢谢你,Madis,这是一个很大的进步。
    • 我完全迷失在这里。你能把你试图迭代的集合(例如Map&lt;String, List&lt;String&gt;&gt;)和你想显示什么样的数据放在一起。我也不明白product_types_temp是什么,也许这应该是product_types。还有你正在使用的#attr 是什么。
    • 其实这些是一些现有的代码。我将product_types_temp 更改为product_types 仍然显示null
    • 会试试这个,让你知道,谢谢
    • 您是否准确地使用了我的示例并使用了 s:checkboxlist?我进行了测试,它奏效了。你能说明你使用了什么代码吗?
    【解决方案2】:

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

    【讨论】:

    • 如果有人可以添加任何改进......请这样做。由于此解决方案完全基于反复试验。
    猜你喜欢
    • 2011-11-08
    • 2011-09-01
    • 2013-01-04
    • 1970-01-01
    • 2014-11-22
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多