F:AJAX内部UI:重复(f:ajax inside ui:repeat)

2019-10-29 04:05发布

我需要显示的拍卖品列表。 当用户点击每个项目旁边的一个按钮投标,我想有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>

我究竟做错了什么? 我怎么可以指定只与点击拍卖项目投标的组成部分?

Answer 1:

如果我理解正确的话,你首先要隐藏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);
}


文章来源: f:ajax inside ui:repeat