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() {
    }
}
Другие вопросы по тегам