2012-07-30 4 views
1

<rich:dataTable> 안에 행 삭제를위한 <a4j:commandButton>이 포함 된 열이 있습니다.RichFaces 데이터 테이블 행 삭제

commandButton의 action 속성을 통해 bean의 삭제 기능 (예 : #{bean.deleteCar(record.carId)})을 호출하면 행을 삭제해도 문제가 없습니다. 불행히도 <a4j:jsFunction>action 속성을 사용하면 마지막 행의 record.carId이 선택된 행 대신 빈에 전달됩니다.

설명을위한 몇 가지 코드입니다. 다음은 클릭 한 행의 차를 삭제 : 당신은 내가 삭제하기 전에 사용자의 선택을 확인하기 위해 노력하고있어 볼 수 있듯이

<a4j:commandButton value="Delete" 
        onclick="#{rich:component('confirmDeletePane')}.show()"> 
    <a4j:jsFunction name="deleteCar" 
        action="#{bean.deleteCar(record.carId)}" 
        oncomplete="#{rich:component('confirmDeletePane')}.hide();" 
        render="carsTable"/> 
</a4j:commandButton> 

<rich:popupPanel id="confirmDeletePane" header="Delete" modal="true" autosized="true" onmaskclick="#{rich:component('confirmDeletePane')}.hide();"> 
     <h:outputText value="Delete?"/> 
     <h:panelGroup> 
       <a4j:commandButton value="Cancel" onclick="#{rich:component('confirmDeletePane')}.hide(); return false;" /> 
       <a4j:commandButton value="OK" onclick="deleteCar(); return false;"/> 
     </h:panelGroup> 
    </rich:popupPanel> 

:

<a4j:commandButton value="Delete" 
        action="#{bean.deleteCar(record.carId)}"/> 

다음은 마지막 행의 차를 삭제합니다. 미리 감사드립니다.

+1

a4j : jsFunction은 commandButton 내에 중첩되어서는 안됩니다. 모달 안에 값을 전달한 다음 확인 버튼에 action 속성의 값을 차 ID 인 백킹 빈에 전달해야합니다. –

+0

@ 엘리 코멘트에 감사드립니다. 비슷한 것을 시도했습니다 : 을 사용하여 백킹 빈에 값을 직접 전달했습니다. 모달 (예 : 색인)에 값을 전달하는 샘플 코드가 있으면 언제든지 공유하십시오. –

+0

나는 당신 자신의 샘플을 만들고 그 다음 코드를 아프게 게시하려고합니다. :) –

답변

0

showcase에서 알 수 있듯이 세련된 해결책은 행 선택에 인덱스를 사용하는 것입니다. 나중에 참조 할 수 있도록 여기에 복사 중입니다.

CommandLink는 (호출 confirmPane)

<rich:popupPanel id="confirmPane" autosized="true"> 
     Delete? 
     <a4j:commandButton value="Cancel" onclick="#{rich:component('confirmPane')}.hide(); return false;" /> 
     <a4j:commandButton value="Delete" onclick="remove(); return false;" /> 
</rich:popupPanel> 

jsFunction는 (빈의 함수 호출) :

<a4j:jsFunction name="remove" action="#{carsBean.remove}" render="table" execute="@this" 
     oncomplete="#{rich:component('confirmPane')}.hide();" /> 

에서

<a4j:commandLink execute="@this" 
       render="@none" 
       oncomplete="#{rich:component('confirmPane')}.show()"> 
     <h:graphicImage value="/images/icons/delete.gif" alt="delete" /> 
     <a4j:param value="#{it.index}" assignTo="#{carsBean.currentCarIndex}" /> 
</a4j:commandLink> 

confirmPane합니다 (JS 함수 호출) 후원 콩 :

private int currentCarIndex; // with the getter/setter 

public void remove() { 
    // do your List removal (or DB transaction) 
    // with the currentCarIndex 
} 
관련 문제