Как я могу получить содержимое из переменной сеанса? - PullRequest
0 голосов
/ 30 января 2009

Моя ситуация:

На моем сайте JSP я показываю таблицу. Когда кто-то щелкает по строке, эта строка должна быть помечена, например, другим цветом фона. Также можно отметить более одной строки. Важны две вещи. Первое: я имею в виду, какие строки помечены. Послать: В каком порядке.

Моя идея:

У меня есть ArrayList и все идентификаторы строк. Так что я решаю обе проблемы. Теперь я помещаю этот ArrayList в сеанс для следующего щелчка и идентификатор строки (req.getSession (). SetAttribute (req.getParameter ("rowID"), "" + arrayList.size ());) для файла jsp.

Моя проблема в файле JSP:

Теперь я не знаю, как называется переменная сеанса.

если щелкнуть по этой строке? ..

У меня есть только имя боба. Как я могу получить контент из сеанса, если именно эта строка должна быть помечена?

Обычно я устанавливаю переменную сеанса так: req.getSession.setAttribut ("printView", Boolean.TRUE) и получаю переменную сеанса так:

Я работаю со стойками, Formbeans и JSP.

Извините, у меня плохой английский, и эта проблема для меня очень сложная. Поэтому я не могу объявить это лучше сейчас.

Ответы [ 2 ]

0 голосов
/ 30 января 2009

Большое спасибо. Как оценить arryList в файле jsp, который находится в сессии?

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

0 голосов
/ 30 января 2009

Давайте сначала проанализируем, что вы храните в сессии:

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

req.getParameter ("rowID") возвращает строковое значение параметра запроса. Если ссылка на вашу страницу yourPage.jsp? RowID = 3 , ее значение будет "3" . Это значение будет использоваться в качестве ключа при вызове метода HttpSession # setAttribute (String, Object) .

"" + arrayList.size () - это просто строковое представление размера вашего arrayList , в котором вы пытаетесь сохранить идентификаторы выбранных строк

Ответ на ваш вопрос: «Я не знаю, что называется именем переменной сеанса». не может быть дано, так как это зависит от значения 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

Как Уксус предложил мне сделать следующее:

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 будет содержать список идентификаторов строк, по которым щелкнули, и их индексы будут сообщать вам их хронологический порядок.

Примечание: безусловно, есть лучшие и более масштабируемые способы для достижения этой цели. В любом случае, это хорошая идея - реализовать свое решение, а затем искать лучшее.

...