Есть ли способ зафиксировать значение отдельных ячеек в таблице данных JSF на основе щелчка пользователя?
Итак, у меня есть таблица, показанная на изображении ниже, и я хочу создать строку, объединив разные ячейки из каждого столбца, который выбирает пользователь. В каждом столбце пользователь может щелкнуть одну или несколько ячеек, и значение в ячейках будет обновлено (добавлен) в текстовой области.
Ниже приведен результат, который я хочу сохранить в текстовом поле.
Самый лучший и самый эффективный способ добиться этого - это JSF. Не обязательно быть датируемым, но я надеюсь, вы знаете, чего я хочу здесь достичь.
Согласитесь с @Kukeltje, именно для этого и предназначен PrimeFaces Extensions Sheet. Возможность получать уведомления об изменении или выборе одной ячейки.
@Melloware: возможно ли, когда у вас выбрано несколько ячеек, и вы делаете ctrl + c, а в отдельном текстовом редакторе делаете ctrl-v, вы получаете текстовое содержимое всех выбранных ячеек. В настоящее время вы получаете только содержимое последней выбранной ячейки.
Хм, перейдите к витрине здесь: primefaces.org/showcase-ext/sections/sheet/basicUsage.jsf В первом столбце «ID» выберите диапазон и нажмите CTRL + C. Когда я вставляю в Блокнот, он копирует все значения ячеек?
Я получаю эту ошибку, когда использую расширенный лист Primefaces. Я использую Primefaces 4.0. "<pe: sheet> Библиотека тегов поддерживает пространство имен: primefaces.org/ui/extensions, но тег не был определен для name: sheet"
Я попытался заставить его работать с datatable, так как он может получать значение на уровне ячейки. Я использую editmode = "cell", чтобы получить доступ к уровню ячейки. inputText отключен, потому что вы не хотите, чтобы пользователь редактировал его. xhtml:
<datatable value"#{yourBean.listValue" var = "list" editMode = "cell" editable = "true"
----and other stuffs----->
<p:ajax event = "cellEdit" listener = "#{yourBean.selectedCell}"/>
<p:column headerText = "A">
<p:cellEditor>
<f:facet name = "output">
<p:outputLabel value = "#{list.valueA}"/>
</f:facet>
<f:facet name = "input">
<p:inputText value = "#{list.valueA}" disabled = "true"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText = "B">
<p:cellEditor>
<f:facet name = "output">
<p:outputLabel value = "#{list.valueB}"/>
</f:facet>
<f:facet name = "input">
<p:inputText value = "#{list.valueB}" disabled = "true"/>
</f:facet>
</p:cellEditor>
</p:column>
----and so on---
</p:datatable>
YourBean:
String result, A, B;
public void selectedCell(CellEditEvent event) {
switch(event.getColumn().getHeaderText()) {
case "A": A= event.getOldValue().toString();
break;
case "B": B = event.getOldValue().toString();
break;
}
result = A + B;
}
Я использую switch-case, если вы хотите, чтобы результат был в порядке. для получения дополнительной информации о редактировании ячейки в datatable проверьте эта ссылка
Спасибо за ответ. Я попытался воспроизвести то же самое, и таблица данных подходит для меня. Но при нажатии на любую ячейку запрос не запускается. Мой слушатель onCellEdit никогда не вызывается.
Кроме того, я думаю, что для работы события cellEdit мне нужно отредактировать ячейку. Это не сработает, если я просто дважды щелкну ячейку. Пожалуйста, поправьте меня, если я ошибаюсь. Есть ли способ решения этой проблемы? @blablabla
когда я попробовал приведенный выше код, он вызвал метод selectedCell после того, как редактирование ячейки потеряло фокус. но мой код не позволяет редактировать ячейку, так как я отключил inputtext. поэтому он работает, когда вы выбираете ячейку, а затем отпускаете фокус, нажимая escape, или щелкаете где-нибудь за пределами данных
Может, primefaces.org/showcase-ext/views/sheet.jsf лучшее решение?