2015-10-05 12 views
0

Раньше существовала концепция естественного разговора в шве. в основном идентификатор разговора может быть обычным, т.е. someAction: 100, и это может быть связано с остальным URL для разговора. следовательно, URL-адрес будет примерно таким:REST-подобный переписывание URL с естественной концепцией беседы

http:localhost:8080/some_context/someAction:100 

Я не могу найти альтернативу в стандартном JSF. Как ты делаешь это?

Помогите, поскольку я в отчаянной ситуации. по крайней мере, дайте мне знать, есть ли какая-либо литература, или если это может быть достигнуто deltaspike.

Большое спасибо

+0

Это возможно при использовании разговора боба, но области действия вы должны иметь некоторые правила перезаписи URL в месте, которое преобразует параметр пути в качестве параметра запроса: '' 'чид = conversionid''' и наоборот – maress

+0

@maress спасибо за ваш комментарий, пожалуйста, дайте пример? – Ikthiander

+0

FYI: Если бы вы запросили в списке рассылки для DeltaSpike, вы бы увидели ответ в течение нескольких часов. –

ответ

1

Вы можете сделать это с DeltaSpike - просто впрыснуть WindowContext и использование/восстановления независимо окна идентификатор вам нравится с помощью метода activateWindow. После этого область разговора, предоставленная DeltaSpike (@GroupedConversationScoped), может использоваться без дальнейшей инициализации, как описано в документации.

Если у вас есть, например, приложение JSF в сочетании с JSF-модулем DeltaSpike, который отображает идентификатор окна как «dswid», вы можете использовать следующий сервлет-фильтр для восстановления и активации одного и того же окна для любых технологий на основе сервлетов, таких как JAX-RS. .. (не забудьте отобразить для Servlet-Filter).

С JSF не забудьте добавить тег на свой шаблон страницы (как описано в документации). Если вам нужно вручную создать ссылку вы можете получить текущее окно идентификатор с помощью:

dswid=#{dsWindowContext.currentWindowId} 

Если вам не нравится использовать «dswid», просто использовать и извлекать информацию, как с любым другим пользовательским параметром (или использовать lib, как prettyfaces/rewrite).

Если вы не используете JSF, вам необходимо визуализировать идентификатор окна самостоятельно и убедиться, что он отправляется обратно на сервер в качестве параметра запроса (как и с любым другим параметром, который вы используете).

В вашем коде, который, наконец, обрабатывает запрос, вы можете просто ввести любой компонент с разбивкой по группам с цепочкой (или выполнить поиск через 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() { 
    } 
} 
+0

спасибо @DarWhi, 1. возможно ли распространять некоторые примеры кода или даже пример ссылки, чтобы я мог принять ваш ответ как правильный? – Ikthiander

+0

см. Обновленный ответ –

+0

спасибо @DarWhi, но как добавить имя разговора, например editAction: 100, а также обобщить его, поскольку оно может быть использовано для других. Я попробовал urlrewrite, но он не позволяет общему идентификатору разговора быть более 9 символов. Я должен признать, что ваше решение очень близко к тому, что я хочу, но не точно. размышляя над вашим советом, теперь я начинаю разговор из класса действий, который мне не нравится, но переписывание URL не позволяет мне более 9 символов. – Ikthiander

 Смежные вопросы

  • Нет связанных вопросов^_^