Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Работа с масссивами в jstl


Автор: SergeSerge 18.12.2009, 14:50
Помогите пожалуйста, совсем замучился! Есть страница, в которую выводятся записи из БД. Для редактирования записей существует 2 кнопки: Edit и delete. При нажатии на кнопку надо, чтобы страница узнавала, какая именно кнопка к ней привела. Каждая из кнопок находится в своей форме, для упрощения обработки.  Названия кнопок генерирую так:
Код

<form style="width:45px; float:left;" action="EditQuestion.jsp" method=post><input type="Submit"
 name="<%out.println(""+ManageListHandler.edits[i]);%>" value="Edit"/></form>


Весь затык в том, чтобы передать имя кнопки в бин, но как это сделать, не знаю, ведь по факту, кнопок у меня может быть море, никакого бина не хватит. Или подскажите, как сделать так, чтобы прямо на jsp странице перебирался массив из уже готового бина. Пробовал сделать так:
Код

  <c:forEach var="map_entry" items="${param}">
  <c:if test="${map_entry.key==QuestionHandler.edits}">
  <c:out value="${QuestionHandler.edits}"></c:out>
  </c:if> 


Где QuestionHandler.edits - массив в бине. Понимаю, что ересь, но у меня уже закончились идеи, как это можно сделать.

Автор: garbuz 19.12.2009, 00:34
Делается это примерно так.
На страницу выводите записи из бд. Напротив каждой строки рисуете две ссылки edit / delete. Каждая из которых содержит параметр типа id и action. Получаются ссылки вида 
Код

<a href="myServlet?id=312&action=edit">Править</a>
<a href="myServlet?id=312&action=delete">Удалить</a>

В сервлете/жсп странице соотвественно получаете параметры и производите нужные действия.
Можно не лепить много ссылок, можно расставить чекбоксы и сделать две кнопки. Кому как нравится.

Автор: SergeSerge 19.12.2009, 12:32
Да с ссылками я быстро бы сделал. Но нужны именно кнопки. Вот такой изврат.

Автор: garbuz 19.12.2009, 14:00
Цитата(SergeSerge @  19.12.2009,  12:32 Найти цитируемый пост)
о нужны именно кнопки. Вот такой изврат.

Опишите задачу поподробнее, не очень понятно из первого поста. Какой массив? Почему именно массив? Почему перебираем мап? Какие бины?

Автор: SergeSerge 19.12.2009, 14:32
Задача: надо сделать так, чтобы при нажатии на кнопку мы переходили на другую страницу, к примеру, на страницу редактирования вопроса. Страница должна знать, какой именно вопрос мы редактируем, то есть он должен быть выведен на этой странице в текстовом поле.

Массивы и мое желание передать все в бин появилось из-за того, что мне так удобнее работать. А поскольку кнопки я генерирую таким образом, чтобы у них имя было АйДишником записи из базы данных, то пробовал создать массив в бине из этих самых айдишников, чтобы, получив имя кнопки, методом перебора найти нужную для редактирования запись в бд. 

Вот, не знаю, как это сделать.

P.S. Мап перебираем потому, что на предыдущей странице каждая кнопка в своей форме. То есть заведомо там будет только один параметр, имя кнопки. А что касается бина, то там как раз и хранится тот самый массив, который я перебрать хотел. Я же, блин, не знаю ничего, кроме цикла forEach в jstl smile 

Автор: garbuz 20.12.2009, 01:12
SergeSerge, ну уж раз хочется кнопки, так пусть будут кнопки.
Предлагаю следующее, может быть не самое красивое решение:
Раз уж вы делаете множество форм, то можно имя кнопкам давать одно и то же. Это избавит вас от переборов для поиска нужной записи. В каждую форму помещать скрытое поле с идентификатором.
Типа того
Код

<form action="quizServlet">
...
<input type="hidden" value="${id}"/>
<input type="submit" name="Edit" value="Edit"/>
/form>


или вообще так

Код

<form action="quizServlet?id={id}">
...
<input type="submit" name="Edit" value="Edit"/>
/form>


Тогда на стороне сервера будет нечто

Код

if (request.getParameter("Edit") != null){ // нажали кнопку Edit

Long id = Long.parseLong(request.getParameter("id")) // получили нужный id

// Достали объект
// положили его в запрос 
// перешли на страницу для редактирования, имея все данные об объекте
...

}



Ну как-то так короче

Автор: SergeSerge 20.12.2009, 09:59
Сделал по второму способу, работает. garbuz, огроменнное спасибо, тема закрыта.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)