我的情况:
在我的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。
抱歉,我的英语不好,这个问题对我来说太难了。所以我现在不能宣布它更好。
答案 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>