Jsf 如何在ajax调用中维护param?

Jsf 如何在ajax调用中维护param?,jsf,primefaces,Jsf,Primefaces,每当我调用ajax时,我的URL参数都会过期。我所做的解决方法是在每个按钮内传递一个param请求,如: <p:commandLink value="Submit" actionListener="#{mybean.dosomething}"> <f:param name="foo" value="#{mybean.bar}"/> </p:commandLink> 拖缆Bean请求范围: public StreamedContent getThumb

每当我调用ajax时,我的URL参数都会过期。我所做的解决方法是在每个按钮内传递一个param请求,如:

<p:commandLink value="Submit" actionListener="#{mybean.dosomething}">
   <f:param name="foo" value="#{mybean.bar}"/>
</p:commandLink>
拖缆Bean请求范围:

 public StreamedContent getThumbnail() throws IOException {
      FacesContext context = FacesContext.getCurrentInstance();
      if (context.getRenderResponse()) {
          return new DefaultStreamedContent();
      }
      else {
         String string = context.getExternalContext().getRequestParameterMap().get("id");
        Long id = Long.parseLong(idString);
        MyImage img = (MyImage) service.find(MyImage.class, id);//get resource
        StreamedContent sc = new DefaultStreamedContent(img.getInputStream(), "image/jpg", img.getName());
        return sc;
        }
 }
此处字符串始终为null,且未传递参数,导致错误

将其注册为

通过这种方式,所有视图参数都包含在表单的操作URL中,因此将以通常的方式作为请求参数结束,而不需要在表单内部进行处理和处理。将其注册为


通过这种方式,所有视图参数都包含在表单的操作URL中,因此将以通常的方式作为请求参数结束,而无需在内部和内部进行处理和处理。

Cool!!已经解决了部分问题,但这导致了另一个错误,因为我无法在表单中发送参数以在表中进行动态图像流。请看问题分机。谢谢你的邀请。这实际上是由于。在保留的同时切换回时也会发生同样的情况。FacesContextgetRenderResponse以某种方式返回false。如果context.getCurrentPhaseId==PhaseId.RENDER_响应,则改为使用。或者,只需检查所需的请求参数是否存在。宾果!!就这样。您能否详细说明为什么FacesContextgetRenderResponse在第一次视图渲染请求时返回true?非常感谢,这解决了我的问题:我还没有仔细研究它。你用的是Mojarra还是MyFaces?我在莫哈拉观察到这个问题。在一次快速测试中,我发现我的脸也有同样的问题。进一步检查后,我意识到getRenderResponse只有在显式调用renderResponse时才会返回true,而如果JSF只是在生命周期的每个阶段运行,这是不会发生的,当存在一个。对,这是一个非常好的时刻。我想我需要修正关于返回StreamedContent的答案。酷!!已经解决了部分问题,但这导致了另一个错误,因为我无法在表单中发送参数以在表中进行动态图像流。请看问题分机。谢谢你的邀请。这实际上是由于。在保留的同时切换回时也会发生同样的情况。FacesContextgetRenderResponse以某种方式返回false。如果context.getCurrentPhaseId==PhaseId.RENDER_响应,则改为使用。或者,只需检查所需的请求参数是否存在。宾果!!就这样。您能否详细说明为什么FacesContextgetRenderResponse在第一次视图渲染请求时返回true?非常感谢,这解决了我的问题:我还没有仔细研究它。你用的是Mojarra还是MyFaces?我在莫哈拉观察到这个问题。在一次快速测试中,我发现我的脸也有同样的问题。进一步检查后,我意识到getRenderResponse只有在显式调用renderResponse时才会返回true,而如果JSF只是在生命周期的每个阶段运行,这是不会发生的,当存在一个。对,这是一个非常好的时刻。我想我需要修正关于返回StreamedContent的答案。
<p:dataTable value="#{mybean.data}" var="var">
    <p:column headerText="Thumbnail">
        <p:graphicImage value="#{streamer.thumbnail}">
            <f:param name="id" value="#{var.id}"/>
        </p:graphicImage>
    </p:column>
</p:dataTable>
 public StreamedContent getThumbnail() throws IOException {
      FacesContext context = FacesContext.getCurrentInstance();
      if (context.getRenderResponse()) {
          return new DefaultStreamedContent();
      }
      else {
         String string = context.getExternalContext().getRequestParameterMap().get("id");
        Long id = Long.parseLong(idString);
        MyImage img = (MyImage) service.find(MyImage.class, id);//get resource
        StreamedContent sc = new DefaultStreamedContent(img.getInputStream(), "image/jpg", img.getName());
        return sc;
        }
 }
<f:viewParam name="foo" value="#{mybean.bar}" />
<o:form includeViewParams="true">
    ...
</o:form>