2017-01-05 1 views
0

레코드의 데이터 테이블로 작업하고 있습니다. 행을 삭제하고 행을 편집 할 수있는 기능 (휴지통 및 편집 아이콘이있는 열)을 사용자에게 제공하고 싶습니다. 사용자가 삭제하려고 할 때 클라이언트 쪽 사용자 지정 확인이 필요합니다. 그들이 예를 클릭하면 서버에 제출하고 행을 삭제하려고합니다.XPages/JSF에서 확인 메시지 클라이언트 측을 사용하여 DataTable 행 삭제

<xp:button styleClass="btn red" 
      value="Delete" 
      id="btnConfirmDelete"> 

    <xp:eventHandler event="onclick" 
        submit="true" 
        refreshMode="partial" 
        refreshId="dataTable" 
        disableValidators="true"> 

     <xp:this.parameters> 
      <xp:parameter name="rowIndex" 
       value="#{rowIndex}"> 
      </xp:parameter> 
     </xp:this.parameters> 

     <xp:this.actionListeners> 
      <xp:actionListener type="com.domain.thing.listeners.deleteItemListener"> 
      </xp:actionListener> 
     </xp:this.actionListeners> 
    </xp:eventHandler> 
</xp:button> 

이 버튼은 반복 패널에 : 나는 <datatable />의 맥락에서이기 때문에

나는이 같은 확인없이이 작업을해야합니다. 각 행 색인은 EL "#{rowIndex}"에 의해 적용됩니다.

잘 작동합니다.

이제 맞춤 확인 메시지를 소개해야합니다.

그래서이 버튼을 <a />으로 대체하여 삭제 대화 상자를 시작하고 ... 이미 대화 상자로 이동하는 삭제 버튼을 이동했습니다. 이제 문제는 "#{rowIndex}"을 잃었습니다. 대신 사용자 지정 속성을 사용하여 값을 DOM에 설정합니다.

내가 겪고있는 문제는 params를 통해 리스너 com.domain.thing.listeners.deleteItemListener에서이 값을 검색하는 것입니다. 나는 대화의 출시에 의해 설정된 rowIndex에 얻을

<xp:eventHandler event="onclick" 
       submit="true" 
       refreshMode="partial" 
       refreshId="demurrageDataTable" 
       onStart="XSP.setSubmitValue(window.dataTableRowDelete); alert('row is ' + XSP.getSubmitValue());" 
       onError="alert('onError: There was an error with the request.');" 
       disableValidators="true"> 

    <xp:this.parameters> 
     <xp:parameter name="rowIndex" 
         value="#javascript:context.getSubmittedValue();}"> 
     </xp:parameter> 
    </xp:this.parameters> 
    <xp:this.actionListeners> 
     <xp:actionListener type="com.canalbarge.trak.listeners.deleteDemurrageItemListener"> 
     </xp:actionListener> 
    </xp:this.actionListeners> 
</xp:eventHandler> 

ONSTART :

는이 같은 코드를 조정했다. 경고가 발생하면 올바른 rowIndex가 표시됩니다.

p.getValue()가 항상 빈 문자열 ""이기 때문에 이벤트 수신기의 서버 측에 예외가 있습니다.

XspEventHandler eventHandler = (XspEventHandler) event.getSource(); 
List<Parameter> params = eventHandler.getParameters(); 
System.out.println(btnName + "checking event params"); 

if(params != null){ 
    for (Parameter p : params) { 
     System.out.println(btnName + p.getName() + "," + p.getValue()); 
     if(p.getName().equals("rowIndex")){ 
      rowIndex = Integer.parseInt(p.getValue()); 
     } 
    } 
} 
else{ 
    System.out.println(btnName + "params is null."); 
} 

답변

1

이런 종류의 일에 대한 나의 일반적인 접근 방식 - 반복의 버튼을 누른 후, 대화 상자를 실행 대화 상자가 닫힐 때 행 서버 측에 작용는 - A의 반복의 요소에 대한 참조를 저장하는 것입니다 viewScope 변수. xp:inputHidden으로 전달하는 것도 가능하며 CSJS를 통해 수행 할 수 있으므로 SSJS를 사용하여 대화 상자를 시작하지 마십시오.

0

해당 삭제 이벤트의 클라이언트 측 스크립트를 return confirm("Are you sure?");으로 정의하십시오. 사용자가 예를 클릭 한 경우에만 SSJS 스크립트가 실행됩니다.

+0

브라우저 확인 기능을 사용할 수 없습니다. 사용자 지정 대화 상자를 사용해야합니다. – xpagesbeast

0

해결책은 제 코멘트입니다. 행 편집 아이콘을 클릭 할 때 rowIndex를 설정해야합니다. 필자의 경우, 제출 된 값 변수를 사용하고 있습니다. Paul Stephans Withers가 지적했듯이 Scoped Variables 중 하나를 사용할 수 있습니다. 모든 경우에 응용 프로그램 맵 변수 중 하나에 rowIndex를 저장하고 대화 상자가 실행될 때이 변수 값을 사용해야합니다.

관련 문제