레코드의 데이터 테이블로 작업하고 있습니다. 행을 삭제하고 행을 편집 할 수있는 기능 (휴지통 및 편집 아이콘이있는 열)을 사용자에게 제공하고 싶습니다. 사용자가 삭제하려고 할 때 클라이언트 쪽 사용자 지정 확인이 필요합니다. 그들이 예를 클릭하면 서버에 제출하고 행을 삭제하려고합니다.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.");
}
제출 된 가치의 가용성에 대한 내 질문에 대한 답변이 확실하지 않지만 해결 방법이 있습니다. 사용자 정의 확인 대화 상자를 표시하는 책임이있는 데이터 행의 태그를 구성 요소 태그 으로 변환하고 제출 된 값을 onclick XSP.setSubmitValue (# {rowIndex})에서 설정하십시오. ... 대화 상자에서 setSubmittedValue JavaScript를 제거하십시오. eventHandlers 및 actionListener가 제출하도록 허용하십시오. 액션 리스너의 매개 변수는 value = "# {javascript : context.getSubmittedValue();}"입니다. 이 값은 actionListener의 params 맵에 있습니다. –
xpagesbeast
@Peter Mortensen, 편집 해 주셔서 감사합니다. – xpagesbeast