加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

jsf – 如何在ajax调用上维护param?

发布时间:2020-12-16 03:12:47 所属栏目:百科 来源:网络整理
导读:参见英文答案 Retaining GET request query string parameters on JSF form submit2个 每当我进行ajax调用时,我的URL参数都会过期.我所做的解决方法是在每个按钮内传递一个param请求,如: p:commandLink value="Submit" actionListener="#{mybean.dosomethin
参见英文答案 > Retaining GET request query string parameters on JSF form submit2个
每当我进行ajax调用时,我的URL参数都会过期.我所做的解决方法是在每个按钮内传递一个param请求,如:
<p:commandLink value="Submit" actionListener="#{mybean.dosomething}">
   <f:param name="foo" value="#{mybean.bar}"/>
</p:commandLink>

但是,在某些情况下,我无法执行上述解决方法.例如,当我使用primefaces rowEditEvent时:

<p:ajax event="rowEditCancel" listener="#{mybean.onCancel}"/>

当我正在调用#{mybean.onCance}时,当我从URL中的param读取数据表的数据时,参与此ajax调用并导致错误.

那么当我进行这样一个ajax调用时,如何保持param值呢?

PS:mybean是ViewScoped

问题扩展:

< o:form>已经解决了部分问题,但现在我无法在表格内部发送params表格内的动态图像流.请参阅以下内容:

<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>

Streamer Bean(RequestScoped):

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;
        }
 }

这里string总是为null,并且不传递参数导致错误

将其注册为< f:viewParam>
<f:viewParam name="foo" value="#{mybean.bar}" />

而不是< h:form>,使用OmniFaces <o:form> with includeViewParams =“true”(它使用自定义ViewHandler实现自动收集所有视图参数并将它们附加到使用的getActionURL()方法的结果作为表单操作URL):

<o:form includeViewParams="true">
    ...
</o:form>

这样,所有视图参数都包含在表单的操作URL中,因此将以通常的方式结束为请求参数,而无需使用< f:param>并且内心无能为力< p:ajax> (和< f:ajax>).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读