REST-подобная перезапись URL с естественной концепцией разговора
Раньше в шве была концепция естественного разговора. в основном идентификатор разговора может быть обычным, т.е. someAction:100, и это может быть связано с похожим на отдых URL-адресом для разговора. следовательно, URL будет примерно таким:
http:localhost:8080/some_context/someAction:100
Я не могу найти альтернативу в стандартном JSF. Как ты делаешь это?
Пожалуйста, помогите, поскольку я в отчаянном положении. по крайней мере, дайте мне знать, если есть какая-либо литература, или если это может быть достигнуто deltaspike.
Большое спасибо
1 ответ
Вы можете сделать это с помощью DeltaSpike - просто введите WindowContext и используйте / восстанавливайте любой идентификатор окна, который вам нравится, с помощью метода activWindow. После этого область диалога, предоставляемую DeltaSpike (@GroupedConversationScoped), может использоваться без какой-либо дальнейшей инициализации, как описано в документации.
Если у вас есть, например, приложение JSF в сочетании с JSF-модулем DeltaSpike, который отображает идентификатор окна как "dswid", вы можете использовать следующий Servlet-Filter для восстановления и активации того же окна для любой технологии на основе сервлетов, такой как JAX-RS,... (не забудьте отображение для фильтра сервлетов).
С JSF не забудьте добавить тег в шаблон страницы (как описано в документации). Если вам нужно создать ссылку вручную, вы можете получить текущий идентификатор окна через:
dswid=#{dsWindowContext.currentWindowId}
Если вы не любите использовать 'dswid', просто используйте и извлеките информацию, как с любым другим пользовательским параметром (или используйте библиотеку, например prettyfaces/rewrite).
Если вы не используете JSF, вам нужно визуализировать идентификатор окна самостоятельно и убедиться, что он отправляется обратно на сервер в качестве параметра запроса (как с любым другим параметром, который вы используете).
В вашем коде, который, наконец, обрабатывает запрос, вы можете просто внедрить любой bean-объект сгруппированной беседы (или выполнить поиск через BeanProvider).
public class WindowIdFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String windowId = request.getParameter("dswid");
if (windowId != null) {
WindowContext windowContext = BeanProvider.getContextualReference(WindowContext.class);
windowContext.activateWindow(windowId);
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}