簡體   English   中英

f:ui中的uj:重復

[英]f:ajax inside ui:repeat

我需要顯示拍賣物品清單。 當用戶點擊每個項目旁邊的出價按鈕時,我想讓ajax在此拍賣項目下打開出價表單。 所以我將使用ui:repeatf:ajax ,如下所示,但是當我轉到頁面時,所有拍賣項目都會在其旁邊打開出價組件。 並單擊任何按鈕不會執行任何操作。 這是代碼(將出價形式簡化為outputText:

<h:form>
<table border="1">
<ui:repeat var="parcel" varStatus="status" value="#{auctionsViewBean.parcels}">
<tr>
  <td><h:commandButton value="Bid" action="nothing">
      <f:ajax render="bidView"/>
  </h:commandButton></td>
  <td>#{status.index + 1}</td>
  <td>#{parcel.a}</td>
  <td>#{parcel.b}</td>
  <td>#{parcel.c}</td>
</tr>    
<tr><td><h:outputText id="bidView" value="#{auctionsViewBean.showBidViewForParcel(parcel)}">Some text</h:outputText></td></tr>

</ui:repeat> 
</table>
</h:form>

我究竟做錯了什么? 如何僅指定與點擊的拍賣項目相關的出價組件?

如果我理解正確,您最初要隱藏bidView直到按下按鈕? 你可以通過給它一個rendered屬性並將它放在另一個可以被<f:ajax>引用的組件中來實現。 您只需要重新排列操作方法和檢查邏輯。

<h:commandButton value="Bid" action="#{auctionsViewBean.addBidView(parcel)}">
<f:ajax render="bidView" />
...
<h:panelGroup id="bidView">
    <h:panelGroup rendered="#{auctionsViewBean.showBidView(parcel)}">
        ...
    </h:panelGroup>
</h:panelGroup>

用這樣的東西:

public void addBidView(Parcel parcel) {
    bidViews.put(parcel, new BidView());
}

public boolean isShowBidView(Parcel parcel) {
    return bidViews.containsKey(parcel);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM