0

私は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()メソッドを記述しませんでしたが、基本的に選択画像をカートに追加し、機能し、画像はカートに正しく追加されますが、モーダルパネルは閉じます

4

1 に答える 1

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= を使用して、ポストバックの受信後に更新されるコンポーネントを指定します。

于 2012-08-09T14:24:50.727 に答える