F: AJAX внутри UI: повторить - PullRequest
       39

F: AJAX внутри UI: повторить

0 голосов
/ 20 ноября 2011

Мне нужно показать список предметов аукциона.Когда пользователь нажимает кнопку «Ставка» рядом с каждым предметом, я бы хотел, чтобы ajax открыл форму заявки прямо под этим предметом аукциона.Итак, я использую ui:repeat и f: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>

Что я делаю не так?И как я могу указать только компонент ставки, связанный с выбранным предметом аукциона?

1 Ответ

2 голосов
/ 20 ноября 2011

Если я правильно вас понимаю, вы хотите изначально скрыть 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);
}
...