是否可以在不关闭模态面板的情况下提交<h:commandlink>操作?</h:commandlink>

时间:2012-08-09 11:40:57

标签: jsf richfaces modal-dialog

我在richfaces模式面板中有以下内容:

<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()方法:

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

我正在使用其他人的代码,所以我没有编写getCartAlbums()方法,但它基本上将选择图像添加到购物车,它正常工作,图像被正确添加到购物车,但模态面板仍然关闭

1 个答案:

答案 0 :(得分:0)

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

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

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