Я работаю с данными данных. Я хочу дать пользователю возможность удалять и редактировать строку inline (столбец с корзиной и значок редактирования). Когда пользователь хочет удалить, мне требуется пользовательское подтверждение на стороне клиента. Если они нажмут «да», я хочу отправить на сервер и удалить строку.Удаление строки DataTable с клиентской стороны с сообщением о подтверждении в 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>
Эта кнопка находится в повторном панели. Каждый индекс строки применяется EL "#{rowIndex}"
.
Он отлично работает.
Теперь мне нужно ввести пользовательское подтверждающее сообщение.
Поэтому я заменил эту кнопку <a />
, чтобы запустить диалоговое окно удаления ... и переместил кнопку удаления, уже работающую в диалоговом окне. Проблема сейчас, я потерял "#{rowIndex}"
. Вместо этого я использую настраиваемое свойство, чтобы установить значение в DOM.
Проблема, с которой я столкнулась, заключается в извлечении этого значения в слушателе com.domain.thing.listeners.deleteItemListener через параметры.
я настроил код вроде этого:
<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, который был установлен на запуск диалога. Когда срабатывает предупреждение, отображается правильное значение 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}); ... удалите javascript setSubmittedValue из диалоговых кнопок eventHandlers и разрешить отправителю действия. Параметром для прослушивателя действий является значение = "# {javascript: context.getSubmittedValue();}". Это значение будет в карте params в actionListener. –
xpagesbeast
@Peter Mortensen, спасибо за редактирование. – xpagesbeast