2011-11-20 2 views
0

경매 물건 목록을 표시해야합니다. 사용자가 각 항목 옆에있는 입찰 버튼을 클릭하면이 경매 항목 바로 아래에서 Ajax 입찰 양식을 열게하고 싶습니다. 아래 그림과 같이 ui:repeatf:ajax으로 갈 예정입니다. 그러나 페이지로 이동하면 모든 경매 항목 옆에 입찰 구성 요소가 열려 있습니다. 아무 버튼이나 클릭해도 아무런 변화가 없습니다. 이 코드f : ui 내부의 ajax : 반복

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

내가 뭐하는 거지 잘못된 (입찰 양식을 그냥 outputText:에 간체)인가? 그리고 클릭 된 경매 항목과 관련된 입찰 구성 요소 만 지정하려면 어떻게해야합니까?

답변

2

정확하게 알았다면 버튼을 누를 때까지 bidView을 처음에 숨기고 싶습니까? rendered 속성을 지정하고 <f:ajax>으로 참조 할 수있는 다른 구성 요소에 넣으면됩니다. 작업 방법과 점검 논리를 재정렬하기 만하면됩니다. 귀하의 회신, BalusC에 대한

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

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

감사 :이 같은 뭔가

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

. 실제로 중첩 된 양식이 없으며 테이블의 요소 중 일부가 제거되어 위의 코드가 단순화되었다고 말했습니다. 간단히 말해서, 위의 코드를 사용할 수 있다면 좋을 것입니다. 그래서 나는 질문을 짐작한다 : "bidView"요소가 페이지가 처음 렌더링 될 때 거기에 있지 않게하고, 클릭 한 번만 클릭 경매에 대해서만 어떻게 표시합니까? (그것은 초보자가하는 질문 중 하나입니다, 나는 여기에 간단한 것을 놓치고 있다고 확신합니다.) – Herzog

+0

아 맞습니다. 귀하의 질문은 모호한 것이었고 귀하의 잘못된 시도는 당신이 정말로 필요로하는 것을 이해하는 잘못된 길로 나를 몰아 넣었습니다. (기본적으로 귀하의 경우에는 ''은 아무 것도하지 않았습니다. 사실이 아닙니다.) 나는 대답을 업데이트했다. – BalusC

+0

시간을내어 주셔서 대단히 감사합니다, BalusC. 이제는 작동하지만 부분적으로 만 작동합니다. 페이지로 이동하면 구성 요소가 숨겨집니다. 단추를 클릭하면 올바른 단추가 표시됩니다. 여태까지는 그런대로 잘됐다. 그러나 isShowBidView가 루프의 각 반복마다 호출되는 것처럼 보입니다 - 버튼을 클릭 한 행까지. 예를 들어, 네 개의 행이 있고 세 번째 행 옆에있는 버튼을 클릭하면 isShowBidView가 첫 번째, 두 번째 및 세 번째 행에 호출됩니다. 처음 두 개는 올바르게 거짓이며, 세 번째는 참입니다. 무슨 일이야? – Herzog

관련 문제