我正在使用 JSF2 和 PrimeFaces,每次我发出 Ajax 请求并检查电流conversation
是否是瞬态的,它不是并且开始新的对话。
当我禁用 Ajax 请求时,表单会自动传递cid
并恢复对话,但当是 Ajax 请求时,cid
不会自动传递。
cid
使用 Ajax 请求时如何正确传递@ConversationScoped
?为什么这个参数没有自动传递?
我正在使用 JSF2 和 PrimeFaces,每次我发出 Ajax 请求并检查电流conversation
是否是瞬态的,它不是并且开始新的对话。
当我禁用 Ajax 请求时,表单会自动传递cid
并恢复对话,但当是 Ajax 请求时,cid
不会自动传递。
cid
使用 Ajax 请求时如何正确传递@ConversationScoped
?为什么这个参数没有自动传递?
我不太清楚您的用例是什么;但理论上,您可以使用<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 的全部意义在于您可以选择发送到服务器的内容。