LINUX.ORG.RU

JSF, IceFaces, checkbox-ы и выпадающее меню.

 ,


0

3

Всем привет!

Необходимо создать страницу как на этом макете.
Описание:
1- выпадающее меню со списком операций;
2 - какой-то список, сейчас не важно;
3 - чекбоксы, с помощью которых будем помечать нужные элементы из списка 2

Всё вроде как просто, но я периодически туплю и это именно этот случай)
Как, в JSF (icefaces), лучше хранить выбранные элементы, чтобы потом их легко получить и произвести операцию, которую пользователь выбрал из списка 1?

В обычных там JSP мы, к примеру, все чекбоксы и кнопку помещаем в форму и передаём выбранные айдишники, или как-то так, суть в том что выбранные вещи передавались в запросе.
Но в JSF можно сделать проще: создать бин с аннотацией @Named, в нём поле хранящее выбранные элементы, когда кликаем по чекбоксу аяксом дёргается метод этого бина и удаляет/добавляет элементы в контейнер. Затем мы кликаем по выпадающему списку выбираем операцию, кликаем и другой аякс запрос дёргает другой метод этого бина, в котором мы смотрим какую операцию выбрали, получаем выбранные элементы и как-то их обрабатываем с учётом выбранной операции.
Всё хорошо, только так не работает, так как когда мы выбираем операции из списка, и отправляем запрос, то контейнер хранящий выбранные элементы уже пуст, т.к. он только что проинициализировался потому что он бин с аннотацией @RequesScope и это правильно. Выкрутился, тем, что создал новый бин, который хранит выбранные элементы и всё нормально хранит, но он @SessionScope - что и не нравится. Если открыть нужную страницу в разных окнах и по выбирать разные элементы, а затем произвести операцию над ними - получим кашу.
Как правильно реализовать?

★★★★

когда кликаем по чекбоксу аяксом дёргается метод этого бина и удаляет/добавляет элементы в контейнер. Затем мы кликаем по выпадающему списку выбираем операцию, кликаем и другой аякс запрос дёргает другой метод этого бина
аннотацией @RequesScope и это правильно
Как правильно реализовать?

Советую начать с курения манов по жсф, потом определиться что именно вы хотите.

PS
Если бин RequesScope, то выполнить пожелание «другой метод этого бина» невозможно ибо бин будет уже другой. Если вы хотите отсылать по одному элементу каждый раз то вам нужен именно SessionScope бин (хотя возможно подойдёт и аппликейшн скоп), если вы хотите RequesScope бин, то придётся хранит состояние на форме и пересылать её целиком каждый раз.

ya-betmen ★★★★★ ()
Ответ на: комментарий от ya-betmen

Спасибо, но это знаю. Application Scope - оч плохо, тем более для для формочки, зачем она всем пользователям)

Думал есть знатоки JSF2 и IceFaces, там можно это реализовать просто, что собственно я и сделал, но не криво, как описал. А может и нельзя... Интересуют разные предложения)

ii8_ ★★★★ ()
Ответ на: комментарий от ya-betmen

а бог его знает)

сделал передачу всех выбранных чекбоксов через запрос и забил. Нечего их ранить) Спасибо!

ii8_ ★★★★ ()
Ответ на: комментарий от ya-betmen

Ну да, туплю местами просто, там где как бы очевидно) На самом деле хранить их и не надо, в моём случае, во-первых была бы проблема если пользователь в разных окнах открыл форму и выбрал какие-то значения - результат был бы неочевиден, во-вторых стараемся как меньше захламлять сессию.

ii8_ ★★★★ ()
Ответ на: комментарий от ii8_

Меня не покидает ощущение, что вы пытаетесь чесать левое ухо правой рукой (вместо того что б почесать правое). Если у вас состояния чекбоксов сохраняются например в базе, то каждый раз лазить в базу накладно, а значит там должна быть кнопка «сохранить», а значит данные с формы нужно отправлять по нажатию и тогда нет смысла реагировать на каждый клик. Если данные с формы никуда не сохраняются - нафига такая форма?

стараемся как меньше захламлять сессию.

ЖСФ и так умеет прекрасно жрать проц, какой смысл ему помогать? Память то дешевле.

ya-betmen ★★★★★ ()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

С помощью чекбосов манипулирую записями в таблице, в которой они отрисовываются (удаление, перемещение по группам), в базу сохраняется состояние записей. Реагировать на каждый клик не надо. Но когда задавал вопрос, то считал, что надо. Ибо использовал aca-components, и делал как в примерах на их сайте, а там везде аjax прикручен, и на каждый чих отправляется запрос, тогда думал так и надо) Тогда ещё не вкурил принцип работы.

ii8_ ★★★★ ()
Ответ на: комментарий от ii8_

Ясно, значит первый совет я дал правильно.

Советую начать с курения манов по жсф, потом определиться что именно вы хотите.

ya-betmen ★★★★★ ()
Ответ на: комментарий от ya-betmen

да, так и сделал. Спасибо!

Вот кажется начинал то с курения манов, но потом, когда решил, что понял -«всё ж вроде легко», переключился на курение готовых примеров, и забыл, что надо ещё докурить маны)))))

ii8_ ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.