Jsf 是否可以提交一份<;h:commandlink>;不关闭modalpanel的操作?

Jsf 是否可以提交一份<;h:commandlink>;不关闭modalpanel的操作?,jsf,richfaces,modal-dialog,Jsf,Richfaces,Modal Dialog,我在richfaces modalpanel中有以下内容: <ui:repeat id="al11" var="albumslistvalue1" value="#{AlbumDetailBean.getAlbumImagesList()}" varStatus="albumslistvalue1Index"> <rich:modalPanel id="panel#{albumslistvalue1Index}" width="850" height="560">

我在richfaces modalpanel中有以下内容:

<ui:repeat id="al11" var="albumslistvalue1" value="#{AlbumDetailBean.getAlbumImagesList()}"
varStatus="albumslistvalue1Index">
  <rich:modalPanel id="panel#{albumslistvalue1Index}" width="850" height="560">
    <f:facet name="header">
      <h:panelGroup>
        <h:outputText value="Fotos"/>
      </h:panelGroup>
    </f:facet>
    <f:facet name="controls">
      <h:panelGroup>
        <h:graphicImage value="/img/modal/close.png" styleClass="hidelink" id="hidelink"/>
        <rich:componentControl for="panel" attachTo="hidelink" operation="hide"
        event="onclick" />
      </h:panelGroup>
    </f:facet>
    <!-- content-->
    <center>
      <h:graphicImage value="img/cart/prior16.png" />
      <h:graphicImage value="albums/#{albumslistvalue1.albumImageId}/med_#{albumslistvalue1.albumimagename}"/>
      <h:graphicImage value="img/cart/next16.png" />
      <h:commandLink id="comp" action="#{AlbumDetailBean.getCartAlbums()}">
        <div>
          <h:outputText value="Comprar" />
          <f:param name="albumproductid" value="#{albumslistvalue1.id}" />
        </div>
      </h:commandLink>
    </center>
  </rich:modalPanel>
  <h:outputLink value="#" id="link">
    <!-- Show Modal Panel -->
    <h:graphicImage id="image" url="albums/#{albumslistvalue1.albumImageId}/mini_#{albumslistvalue1.albumimagename}"
    width="100px" height="auto" />
    <rich:componentControl for="panel#{albumslistvalue1Index}" attachTo="link"
    operation="show" event="onclick" />
  </h:outputLink>
</ui:repeat>

我使用的是其他人的代码,所以我没有编写getCartAlbums()方法,但它基本上是将select图像添加到购物车中,它工作正常,图像正确添加到购物车中,但modalpanel仍然关闭

我想您使用的是JSF 1/RF3?getCartAlbums()正在返回一个列表,对吗?我的JSF1知识来自遥远的过去,但看起来并不正确

然而,问题是h:commandLink正在执行完整的页面提交,这是一个POST请求,它使用回发的结果(对POST请求的响应)重新加载页面。因此,按下按钮后,您会看到屏幕重新绘制,您看到的是页面处于与第一次加载页面时相同的状态(尽管有更新的值),没有modalPanel


要解决此问题,您需要使用a4j:commandLink执行ajax部分提交。我不确定RF3在a4j:commandLink组件上是否具有execute=和render=属性,或者是否必须将a4j:support用作子组件,但我相信您可以找到答案。您可以使用execute=指定在ajax POST请求主体中提交哪些组件值,render=指定在收到回发后更新哪些组件。

请尝试将
getCartAlbums
的返回值更改为null或将其设为void methodPlease,发布模态面板的代码和
getCartAlbums()
方法的代码,这样我们可以更好地帮助您。使其无效和/或返回没有帮助@Daniel只是在RF 3中发布了代码,您有
process
而不是
execute
reRender
而不是
render
。另外,处理这个问题的更好的建议是将托管Bean设置为请求范围,并在托管Bean类定义的开头添加
@KeepAlive
注释。我现在正在使用,并意识到这些行在我的页面上。xml:因此,每次操作getCartAlbums()时,页面都会被重定向到自身被执行后,我删除了这个,所有的事情都变成了一个小问题:在执行操作后,页面的其余部分不会被“重新命名”感谢Luiggi的澄清,我努力想记住!有人知道为什么我不能在modalpanel之外重新加载div吗?最可能的原因是它位于不同的命名容器(即表单)中。您是否可以检查页面源或使用浏览器开发人员工具检查客户端id。您可能需要使用诸如reRender=“form2:myid”之类的构造。
public List getCartAlbums() {
  boolean status = false;
  AlbumImpl bean1 = new AlbumImpl();

  String productidval = ((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getParameter("albumproductid");

  AlbumDetailBean albums = (AlbumDetailBean) bean1.bo_getAlbumImageDetails(productidval);

  if(albums != null) {

    cartAlbumDetails.add(albums);
    setId(albums.getId());
    setAlbumname(albums.getAlbumname());
    setSchoolId(albums.getSchoolId());
    setAlbumImageId(albums.getAlbumImageId());
    setAlbumimagename(albums.getAlbumimagename());
    // setAlbumimage(albums.getAlbumimage());
    setListPrice(albums.getListPrice());
    setAvailableQty(albums.getAvailableQty());
    setTotalAmount(albums.getTotalAmount());
    setProductcode(albums.getProductcode());
    setListpricevalue(albums.getListpricevalue());
    setProductsize(albums.getProductsize());
    setQtyvalue(albums.getQtyvalue());
    setTotalpricevalue(albums.getTotalpricevalue());
    setProductid(albums.getProductid());
    setShipPrice(albums.getShipPrice());
  }
  return cartAlbumDetails;
}