ICEfaces: Как отключить механизм отправки-получения-обновления для некоторых форм - PullRequest
1 голос
/ 19 февраля 2009

Я довольно новичок в ICEfaces, но уже имею опыт работы с JSF / Facelets и Java EE в целом.

В настоящее время я не использую большую часть ICEfaces, за исключением некоторых служебных тегов, таких как outputStyle и outputDeclaration, но даже это очень приятно иметь.

Несмотря на то, что я планирую использовать некоторые функции AJAX позже, у меня есть некоторые h: формы (или ice: формы), которые я хотел бы отправлять как обычные запросы JSF POST, без использования / block / send-receive-updates. Причина в том, что я хочу использовать фильтр, который действует на запрошенный URI, что невозможно, если все отправлено в /block/send-receive-updates.

Есть ли способ сделать это?

Редактировать: Чтобы уточнить, что я хочу сделать:

Веб-сайт, который мы разрабатываем, состоит из общедоступных страниц, некоторые из которых доступны только зарегистрированным пользователям. Стандартный механизм безопасности на основе FORM, определенный в стандарте сервлетов, довольно негибкий, так как он позволяет определить только одну страницу входа, которая отображается, когда кто-то хочет получить доступ к некоторому ограниченному контенту. Поскольку мы также хотим, чтобы пользователь мог войти в систему с помощью небольшой формы входа, видимой на каждой странице, мы разработали фильтр, который обрабатывает аутентификацию и авторизацию почти так же, как веб-контейнер. Он перенаправляет на пользовательскую страницу входа в систему, если пользователь не аутентифицирован / авторизован, но также позволяет аутентифицировать пользователя из компонента поддержки. Чтобы заставить его работать почти прозрачно, он оборачивает запрос HttpServletRequest для предоставления ролей принципала и пользователя.

Когда фильтр перенаправляет на пользовательскую страницу входа, он сохраняет текущий запрос, чтобы «воспроизвести» его позже, когда пользователь был успешно аутентифицирован. Для этого фильтр должен иметь возможность определять, поступил ли запрос POST со страницы входа в систему (и, таким образом, теперь ли пользователь прошел аутентификацию / авторизацию). Но если каждый POST проходит через / block / send-receive-updates, это больше не работает.

Конечно, я мог бы исключить обработку страницы входа в систему ICEfaces, но это означало бы, что я не мог использовать какие-либо ICEfaces / AJAX на странице входа в систему.

Ответы [ 2 ]

1 голос
/ 25 февраля 2009

Возможно, это не лучший способ сделать это, но это может быть a способ. Ради аргумента, я предполагаю, что ваш заголовок содержит вашу дополнительную форму входа. Если вы хотите сделать свой заголовок либо в отдельном фрейме, либо на главной странице макета и вставить свои JSF-страницы в iframe, это может сработать. Идея состоит в том, что, поскольку она отображается как отдельная страница, вы можете обрабатывать ее отдельным способом.

Кроме того, может быть другой способ управления вашей безопасностью, который сделал бы это более IceFaces-y. Возможно, когда вы нажимаете на фильтр, и он определяет, что вы не вошли в систему, он должен создать компонент (вероятно, сеанс), который содержит информацию из исходного запроса (URL, параметры и т. Д.) И отправляет вас на страница авторизации. Страница входа в систему делает свое дело, добавляя свои средства безопасности, а затем использует информацию в этом сессионном компоненте для принудительного перенаправления на вашу новую страницу. Вы можете использовать FacesContext, чтобы получить HttpContext и выполнить перенаправление. Возможно, вам придется поэкспериментировать с редиректом, чтобы добавить подходящие параметры. Наконец, вы должны избавиться от сессионного компонента.

Наконец, я знаю, что есть пара Frameworks (Spring WebFlow, springs на ум), которые сохранят состояние вашего запроса, позволят вам выполнить вход и перенаправить вас туда, куда вы направлялись во-первых, довольно легко (что, напоминает мне, я думаю, что Seam может сделать это тоже. Вероятно, Orchestra и другие ваши фреймворки).

Надеюсь, это поможет!

1 голос
/ 20 февраля 2009

Я использую IceFaces уже почти год и еще не сталкивался с возможностью отправки формы без прохождения send-receive-updates. Но мне любопытно, вы говорите: «Я планирую использовать некоторые функции AJAX позже». Смысл IceFaces в том, что он в значительной степени прозрачно добавляет AJAX в ваше приложение JSF. Это вещь типа «все или ничего» - любая ваша страница, которая использует IceFaces, будет использовать AJAX.

Единственное, что я могу подумать о вас, - это не использовать IceFaces для страниц, на которых вы хотите использовать POST-запросы - то есть вы можете отображать страницы IceFaces в * .iface, но обычные JSF в * .faces.

В качестве альтернативы, может быть какой-то другой способ выполнить то, что вы хотите сделать с помощью фильтров.

...