如何从会话变量中获取内容?

时间:2009-01-30 12:53:29

标签: jsp session struts javabeans

我的情况:

在我的jsp网站上,我展示了一张桌子。当某人单击某一行时,该行必须标有其他背景颜色。还可以标记多行。有两件事很重要。 第一:我记住哪些行被标记。 Secend:按顺序排列。

我的想法是:

我有一个ArrayList并将所有行ID放入其中。所以我解决了这两个问题。现在,我将此ArrayList放入会话中以进行下一次单击,并将jq文件的行ID(req.getSession()。setAttribute(req.getParameter(“rowID”),“”+ arrayList.size());)放入。

我在jsp文件中的问题:

我现在不称为会话变量名。

如果这个rowId alrady点击了吗?  ..

我只有豆名。如果必须标记此行,我该如何从会话中获取内容?

通常我设置一个会话变量:req.getSession.setAttribut(“printView”,Boolean.TRUE)并得到一个会话变量:

我使用struts,formbeans和jsp。

抱歉,我的英语不好,这个问题对我来说太难了。所以我现在不能宣布它更好。

2 个答案:

答案 0 :(得分:0)

让我们首先分析你在会话中存储的内容:

req.getSession().setAttribute(req.getParameter("rowID") , ""+arrayList.size());

req.getParameter(“rowID”)返回请求参数的字符串值。如果您的网页链接为 yourPage.jsp?rowID = 3 ,则其值为“3”。此值将用作调用 HttpSession#setAttribute(String,Object)方法的键。

“”+ arrayList.size()只是您在 arrayList 大小的String表示形式,您在其中尝试存储已点击行的ID

回答你的问题“我现在不知道所谓的会话变量名称。”无法给出,因为它取决于 rowID 请求参数的值。

如果你想检查会话中的内容,只需遍历其属性:

for (Enumeration elem : req.getSession().getAttributeNames()) {
    String name = elem.nextElement();
    System.out.println(name + " : " + req.getSession().getAttribute(name));
}

如果你没有将arrayList存储在会话中,之前的代码可能会返回如下内容:

1 : 0
5 : 0
1 : 0

正如Vinegar建议我接下来做的那样:

String clickedRowId = req.getParameter("rowID");
List<String> arrayList = (List)req.getSession().getAttribute("clickedRows");
if (!arrayList.contains(clickedRowId)) {
    arrayList.add(clickedRowId);
}
req.getSession().setAttribute("clickedRows", arrayList);

您的arrayList将保存一个单击的行ID列表,它们的索引将告诉您它们的时间顺序。

注意:实现这一目标肯定有更好,更具可扩展性的方法。无论如何,实现您的解决方案然后寻找更好的解决方案是个好主意。

答案 1 :(得分:0)

非常感谢你。 如何评估jsp文件中的arrayList,这是在会话中?

<datagrid:tableEx ...>
<c:if test="${ arrayList.contains(bean.rowID)}">
    <div id="tableheader">
                 <datagrid:column property="bean.rowID" ... bgcolor="#BDC6DD"/>
                 <datagrid:column ... bgcolor="#BDC6DD" />
                 <datagrid:column ... bgcolor="#BDC6DD" />
                  ...
    </div>
</c:if>
<c:if test="${!arrayList.contains(bean.rowID)}">
    <div id="tableheader">
                 <datagrid:column property="bean.rowID"/>
                 <datagrid:column ... />
                 <datagrid:column ... /> 
            </div>
</c:if>