3

我正在使用 JSF2 和 PrimeFaces,每次我发出 Ajax 请求并检查电流conversation是否是瞬态的,它不是并且开始新的对话。

当我禁用 Ajax 请求时,表单会自动传递cid并恢复对话,但当是 Ajax 请求时,cid不会自动传递。

cid使用 Ajax 请求时如何正确传递@ConversationScoped?为什么这个参数没有自动传递?

4

1 回答 1

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. 您可以从支持 bean 中的组件参数映射中提取参数:

    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 的全部意义在于您可以选择发送到服务器的内容。

于 2013-04-26T04:00:11.200 回答