我正在使用JSF2和PrimeFaces,每次我发出Ajax请求并检查当前conversation
是否是暂时的,它不是,并且会启动新的会话。
当我禁用Ajax请求时,表单会自动传递cid
并恢复对话,但是当这是Ajax请求时,cid
不会自动传递。
在cid
使用Ajax请求时,如何正确传递@ConversationScoped
?为什么不自动传递此参数?
答案 0 :(得分:1)
我不清楚你的用例是什么;但理论上,您可以使用任何给定组件上的<f:attribute/>
标记传递参数。
将<f:attribute/>
标记添加到启动AJAX调用的组件
<p:commandLink id="aComponent" value="#{bean.val}" action="#{bean.doSomething}">
<f:attribute name="conversationId" value="#{param['cid']}"/>
</p:commandLink>
您可以从辅助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的重点在于您可以选择要发送到服务器的内容。