2013-04-25 2 views
3

Я использую JSF2 и PrimeFaces, и каждый раз, когда я делаю запрос Ajax и проверяю, является ли текущий conversation временным, это не так, и начинается новый разговор.Как использовать @ConversationScoped с запросами Ajax?

Когда я отключу запрос Ajax, форма автоматически передает cid, и разговор возобновляется, но когда это запрос Ajax, cid не передается автоматически.

Как правильно пройти cid при использовании Ajax-запросов с @ConversationScoped? Почему этот параметр не передается автоматически?

ответ

1

Я не совсем понимаю, что такое ваш случай использования; но теоретически вы можете передать этот параметр, используя тег <f:attribute/> на любом заданном компоненте.

  1. Добавьте <f:attribute/> тег компонента инициирующей AJAX называют

    <p:commandLink id="aComponent" value="#{bean.val}" action="#{bean.doSomething}"> 
        <f:attribute name="conversationId" value="#{param['cid']}"/>   
    </p:commandLink> 
    
  2. Вы можете вытащить параметр из таблицы параметров компонента в вашем бэк-боба:

    FacesContext context = FacesContext.getCurrentInstance(); 
    UIViewRoot theView = context.getViewRoot(); 
    UIComponent component = theView.findComponent("aComponent"); 
    Integer theConversationId =(Integer) component.getAttributes().get("cid"); 
    

Ключевым моментом здесь является то, что параметр доступен в #{param} карта (как и любой другой параметр GET). Причина, по которой он не передается автоматически через ajax, заключается в следующем: параметры GET требуют полного HTTP-запроса для передачи. Весь смысл AJAX заключается в том, что вы можете выбрать, что отправить на сервер.

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