Я использую <ui:include>
для загрузки таблицы данных (я использую Primefaces). Я хочу использовать <ui:param>
в listener
в тег <p:ajax>
. Я проверил код, который не работает, но не вызывает событие onRowEdit или onRowCancel. Это моя страница:Использовать <ui:param> в прослушивателе в теге <p:ajax>
...
<ui:include src="../Componentes/tablaEditable.xhtml">
<ui:param name="columnas" value="#{tabla2FuentesHL7.dataTableColumns}" />
<ui:param name="bean" value="#{tabla2FuentesHL7.listTabla2FuenteDTO}" />
<ui:param name="aceptarEdicion" value="#{tabla2FuentesHL7.onRowEdit}" />
<ui:param name="cancelarEdicion" value="#{tabla2FuentesHL7.onRowCancel}" />
</ui:include>
...
Мои данные таблицы:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:form >
<p:dataTable value="#{bean}" scrollable="true" scrollHeight="100" var="dato" editable="true">
<p:ajax event="rowEdit" listener="#{aceptarEdicion}" />
<p:ajax event="rowEditCancel" listener="#{cancelarEdicion}" />
<c:forEach items="#{columnas}" var="column" varStatus="loop">
<p:column headerText="#{column.header}" sortBy="#{dato[column.property]}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{dato[column.property]}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{dato[column.property]}" style="width:100%" />
</f:facet>
</p:cellEditor>
</p:column>
</c:forEach>
<p:column style="width:32px">
<p:rowEditor />
</p:column>
</p:dataTable>
</h:form>
Мой боб:
@ManagedBean(name = "tabla2FuentesHL7")
@ViewScoped
enter code herepublic class Tabla2FuentesHL7 {
private static final long serialVersionUID = 1L;
private List<DataTableColumn> dataTableColumns = new ArrayList<DataTableColumn>();
private List<Tabla2FuenteDTO> listTabla2FuenteDTO = new ArrayList<Tabla2FuenteDTO>();
@PostConstruct
public void init() {
listTabla2FuenteDTO = Test.getFuenteTabla2();
dataTableColumns = CargarTablas.getTabla2FuenteHL7();
}
public List<Tabla2FuenteDTO> getListTabla2FuenteDTO() {
return listTabla2FuenteDTO;
}
public List<DataTableColumn> getDataTableColumns() {
return dataTableColumns;
}
public void onRowEdit(RowEditEvent event) {
FacesMessage msg = new FacesMessage("Elemento modificado");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void onRowCancel(RowEditEvent event) {
FacesMessage msg = new FacesMessage("Modificación cancelada");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void onCellEdit(CellEditEvent event) {
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();
if (newValue != null && !newValue.equals(oldValue)) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue);
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
}
Это ошибка:
javax.el.PropertyNotFoundException: /Componentes/tablaEditable.xhtml @12,76 listener="#{cancelarEdicion}": /Modulos/hl7.xhtml @31,104 value="#{tabla2FuentesHL7.onRowCancel}": The class 'com.queres.xedoc.consola.componentes.Tabla2FuentesHL7' does not have the property 'onRowCancel'.
Если изменить это:
<p:ajax event="rowEdit" listener="#{aceptarEdicion}" />
<p:ajax event="rowEditCancel" listener="#{cancelarEdicion}" />
для этого:
<p:ajax event="rowEdit" listener="#{tabla2FuentesHL7.onRowEdit}" />
<p:ajax event="rowEditCancel" listener="#{tabla2FuentesHL7.onRowCancel}" />
мой код работает отлично, но мне нужно динамическую таблицу данных. Есть ли способ передать параметр слушателю? Спасибо!
Спасибо за ваш ответ, но я не могу заставить его работать. Теперь у меня есть эта ошибка: 'javax.el.PropertyNotFoundException: Target Unreachable, идентификатор 'beanEdicion' разрешен null' –
Какая версия PF? Это известная проблема в '' и должна быть уже исправлена в 5.x. См. Также соответствующий вопрос: http://stackoverflow.com/questions/10691636/facelet-tag-parameter-not-recognized-by-primefaces-pajax –
BalusC
Я использую JSF 2.1.11 и Primefaces 5.1. Еще раз спасибо :) –