我对使用PrimeFaces 3.4.1和JSF 2.1.6的dataTable有以下问题。第一次加载页面时,数据表中充满了数据库中的数据,但每当在页面上执行操作(编辑链接、数据表排序或过滤)时,数据表就会丢失其数据。DataTable包含来自此类的元素:
package es.cne.sicbios.entities.tramites.envios;
import java.io.Serializable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import es.cne.sicbios.entities.tramites.envios.sujeto.data.EnvioDataContactoEconomico;
import es.cne.sicbios.entities.tramites.envios.sujeto.data.EnvioDataEmpresaFilial;
import es.cne.sicbios.entities.tramites.envios.sujeto.data.EnvioDataHistoricoTipoSujeto;
import es.cne.sicbios.entities.tramites.envios.sujeto.data.EnvioDataPersonaContacto;
import es.cne.sicbios.entities.tramites.envios.sujeto.data.EnvioDataPlantaProduccion;
import es.cne.sicbios.entities.tramites.envios.sujeto.data.EnvioDataRepresentante;
import es.cne.sicbios.entities.tramites.envios.sujeto.data.EnvioDataSujeto;
import es.cne.sicbios.entities.tramites.solicitudes.SolicitudSujeto;
@SuppressWarnings("serial")
@Entity
public class EnvioSujeto extends Envio implements Serializable{
@ManyToOne(optional = false, cascade = CascadeType.ALL)
private SolicitudSujeto solicitud;
@OneToOne(mappedBy = "envioSujeto", cascade = CascadeType.ALL)
private EnvioDataContactoEconomico envioDataContactoEconomico;
@OneToMany(mappedBy = "envioSujeto", cascade = CascadeType.ALL)
private List<EnvioDataEmpresaFilial> enviosDataEmpresaFilial;
@OneToMany(mappedBy = "envioSujeto", cascade = CascadeType.ALL)
private List<EnvioDataHistoricoTipoSujeto> enviosDataHistoricoTipoSujeto;
@OneToMany(mappedBy = "envioSujeto", cascade = CascadeType.ALL)
private List<EnvioDataPlantaProduccion> enviosDataPlantaProduccion;
@OneToOne(mappedBy = "envioSujeto", cascade = CascadeType.ALL)
private EnvioDataSujeto envioDataSujeto;
@OneToMany(mappedBy = "envioSujeto", cascade = CascadeType.ALL)
private List<EnvioDataPersonaContacto> enviosDataPersonaContacto;
@OneToMany(mappedBy = "envioSujeto", cascade = CascadeType.ALL)
private List<EnvioDataRepresentante> enviosDataRepresentante;
public SolicitudSujeto getSolicitud() {
return solicitud;
}
public void setSolicitud(final SolicitudSujeto solicitud) {
this.solicitud = solicitud;
}
... //rest of getters and setters
}
在dataTable上执行操作后进行调试时,我们只在envioDatasujeto字段上保留数据,元素上的其他所有数据都会丢失。
这是xhtml:
<ui:composition template="/templates/layout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:blb="http://ecb.bilbomatica.es/components">
<ui:define name="content">
<f:loadBundle basename="es.cne.sicbios.gestionsujetos" var="gestionmsg" />
<h:form id="formulario">
<p:messages id="messages" showDetail="true" autoUpdate="true"
closable="true" />
<p:dataTable var="envioSujeto"
value="#{listadoEnviosSujetoMB.lazyListaAllEnvios}"
paginator="true" rows="10"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="5,10,15"
selectionMode="single"
selection="#{listadoEnviosSujetoMB.envioSeleccionado}"
id="listaEnviosSujetos"
lazy="true">
<f:facet name="header">
#{gestionmsg.txt_listadoEnviosSujetos}
</f:facet>
<p:column sortBy="#{envioSujeto.envioDataSujeto.datosSujeto.acronimo}" headerText="#{gestionmsg.column_acronimo}"
filterBy="#{envioSujeto.envioDataSujeto.datosSujeto.acronimo}">
<h:outputText value="#{envioSujeto.envioDataSujeto.datosSujeto.acronimo}" />
</p:column>
<p:column sortBy="#{envioSujeto.solicitud.id}"
headerText="#{gestionmsg.column_id_tramite}"
filterBy="#{envioSujeto.solicitud.id}"
filterMatchMode="contains">
<h:outputText value="#{envioSujeto.solicitud.id}" />
</p:column>
<p:column sortBy="#{envioSujeto.fechaCreacion.time}"
headerText="#{gestionmsg.column_fechaCreacion}"
filterBy="#{envioSujeto.fechaCreacion.time}"
filterMatchMode="contains">
<h:outputText value="#{envioSujeto.fechaCreacion.time}" >
<f:convertDateTime pattern="dd/mm/yyyy"/>
</h:outputText>
</p:column>
<p:column sortBy="#{envioSujeto.tipo}"
headerText="#{gestionmsg.column_tipoEnvio}"
filterBy="#{envioSujeto.tipo}"
filterMatchMode="contains">
<h:outputText value="#{envioSujeto.tipo}" />
</p:column>
<p:column sortBy="#{envioSujeto.solicitud.estado}"
headerText="#{gestionmsg.column_estado}"
filterBy="#{envioSujeto.solicitud.estado}"
filterMatchMode="contains">
<h:outputText value="#{envioSujeto.solicitud.estado}" />
</p:column>
<p:column sortBy="#{envioSujeto.idRegistro}"
headerText="#{gestionmsg.column_idRegistro}"
filterBy="#{envioSujeto.idRegistro}"
filterMatchMode="contains">
<h:outputText value="#{envioSujeto.idRegistro}" />
</p:column>
<p:column sortBy="#{envioSujeto.id}"
headerText="id"
filterBy="#{envioSujeto.id}"
filterMatchMode="contains">
<h:outputText value="#{envioSujeto.id}" />
</p:column>
<ui:remove>
<!--
<p:column
headerText="#{gestionmsg.column_bloqueo}"
>
<h:outputText value="" />
</p:column>
-->
</ui:remove>
</p:dataTable>
<p:commandLink icon="ui-icon-pencil"
update=":formulario"
actionListener="#{listadoEnviosSujetoMB.goToEditarEnvio}" >
<h:outputText value="Editar" />
</p:commandLink>
</h:form>
</ui:define>
</ui:composition>
以及它的托管bean:
package es.cne.sicbios.managedbean.gestionsujetos;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import es.cne.sicbios.entities.tramites.envios.Envio;
import es.cne.sicbios.services.tramites.envios.IEnvioService;
import es.cne.sicbios.utils.FacesUtils;
@SuppressWarnings("serial")
@ViewScoped
@ManagedBean(name = "listadoEnviosSujetoMB")
public class ListadoEnviosSujetoMB implements Serializable {
@ManagedProperty(value = "#{envioSujetoService}")
private IEnvioService envioService;
private Envio envio;
private List<Envio> listaAllEnvios;
private LazyEnvioSujetoDataModel lazyListaAllEnvios;
private Envio envioSeleccionado;
/**
*
* Getters y Setters
*/
@PostConstruct
public void init(){
if (lazyListaAllEnvios == null) {
lazyListaAllEnvios = new LazyEnvioSujetoDataModel(envioService);
}
}
public void setEnvioService(final IEnvioService envioService) {
this.envioService = envioService;
}
public Envio getEnvio() {
return envio;
}
public void setEnvio(final Envio envio) {
this.envio = envio;
}
public List<Envio> getListaAllEnvios() {
if (listaAllEnvios == null) {
listaAllEnvios = envioService.getAll();
}
return listaAllEnvios;
}
public void setListaAllEnvios(final List<Envio> listaAllEnvios) {
this.listaAllEnvios = listaAllEnvios;
}
public Envio getEnvioSeleccionado() {
return envioSeleccionado;
}
public void setEnvioSeleccionado(final Envio envioSeleccionado) {
this.envioSeleccionado = envioSeleccionado;
}
/**
* Métodos de navegación
*/
public String goToEditarEnvio() {
FacesUtils.saveObjectInFlashScope("envio", envioSeleccionado);
return "/pages/gestionsujetos/envio.xhtml?faces-redirect=true";
}
public LazyEnvioSujetoDataModel getLazyListaAllEnvios() {
return lazyListaAllEnvios;
}
public void setLazyListaAllEnvios(final LazyEnvioSujetoDataModel lazyListaAllEnvios) {
this.lazyListaAllEnvios = lazyListaAllEnvios;
}
}
此外,我们试图对数据进行延迟加载,但它不起作用。这是我们使用的数据模型(来自PrimeFaces.org上的Lazy Loding示例的改编类):
package es.cne.sicbios.managedbean.gestionsujetos;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.faces.bean.ViewScoped;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SelectableDataModel;
import org.primefaces.model.SortOrder;
import es.cne.sicbios.entities.tramites.envios.Envio;
import es.cne.sicbios.services.tramites.envios.IEnvioService;
/**
* Dummy implementation of LazyDataModel that uses a list to mimic a real datasource like a database.
*/
@ViewScoped
public class LazyEnvioSujetoDataModel extends LazyDataModel<Envio> implements Serializable, SelectableDataModel<Envio> {
/**
*
*/
private static final long serialVersionUID = 983251078912322527L;
private final List<Envio> datasource;
public List<Envio> getDatasource() {
return datasource;
}
public LazyEnvioSujetoDataModel(final IEnvioService envioService) {
this.datasource = envioService.getAll();
}
@Override
public Envio getRowData(final String rowKey) {
for(final Envio envio : datasource) {
if(envio.getId().equals(rowKey))
return envio;
}
return null;
}
@Override
public Object getRowKey(final Envio envio) {
return envio.getId();
}
@Override
public List<Envio> load(final int first, final int pageSize,
final String sortField, final SortOrder sortOrder, final Map<String,String> filters) {
final List<Envio> data = new ArrayList<Envio>();
//filter
for(final Envio envio : datasource) {
boolean match = true;
for(final Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
try {
final String filterProperty = it.next();
final String filterValue = filters.get(filterProperty);
final String fieldValue = String.valueOf(envio.getClass().getField(filterProperty).get(envio));
if(filterValue == null || fieldValue.startsWith(filterValue)) {
match = true;
}
else {
match = false;
break;
}
} catch(final Exception e) {
match = false;
}
}
if(match) {
data.add(envio);
}
}
//sort
// if(sortField != null) {
// Collections.sort(data, new LazySorter(sortField, sortOrder));
// }
//rowCount
final int dataSize = data.size();
this.setRowCount(dataSize);
//paginate
if(dataSize > pageSize) {
try {
return data.subList(first, first + pageSize);
}
catch(final IndexOutOfBoundsException e) {
return data.subList(first, first + (dataSize % pageSize));
}
}
else {
return data;
}
}
}
这个问题有什么想法吗?提前谢谢你,胡安乔。
我也有同样的问题,当我意识到这是因为我不小心使用了
import javax.faces.bean.ViewScoped;
包装代替
import javax.faces.view.ViewScoped;
团队的一位朋友得到了这个问题的答案。我们正在使用Spring工具套件,有时它会更改JSF托管bean的保存方法。我们需要在我们的网络上有这个。xml:
<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
我正在使用DSS签署Pdf文档。我需要这些文档有时间戳并启用LTV(启用PAdES LTV)。 我遇到了一些关于撤销数据的问题。 我对这个领域有点陌生,所以请容忍我。 我按照DSS本身提供的说明和演示进行操作,但没有效果。 我已经成功地使用PAdES B和PAdES T签署了Pdf,所以我的TSA服务设置正确。 我遇到的问题是,每次我尝试使用LTV签署Pdf时,都会出现以下错误:“eu.europ
我正在使用primeface 3.5,我希望在以下问题上得到帮助: 我有一个选择模式为single的datatable,所选项目是绑定到对象,而不是特定对象属性上的对象。下面的示例代码: 在项目创建期间,我不会立即将项目持久化到数据库,而是维护一个项目列表,并在操作保存处理程序期间持久化整个列表。 问题是,对于每个新创建的项,我都没有生成对象id(在持久化时在数据库上自动完成),并且在表上选择行的
我正在使用java,从服务器收到了一些json字符串。我收到了带有readUTF的json字符串,但是有一些数据丢失了。我没有收到每个json包的前两个字符。另一个问题是收到json字符串有延迟。例如,服务器发送了一个json字符串,客户端无法收到它,直到服务器和客户端发送的大约50个json字符串突然显示所有的json字符串。主要问题是什么? 因为服务器用UTF格式发送数据,所以我不能用Buff
我有两个类:停车场和汽车。公园有一个ID和一个汽车列表。我想在数据表中显示带有标签的停车场和汽车列表。问题是我无法在数据表中找到汽车的车牌号。当我尝试在Netbean中自动完成时,它会显示可能的公园字段(公园ID和汽车列表)。为什么?有什么想法如何修复它吗?
该页显示列表中的正确值。然而,当我尝试选择一个项目。它不起作用。 我能在列表中选择一个项目吗?
我正在尝试在datatable(primefaces 3.5)中进行筛选。仅当用户单击commandLink时才应触发筛选器。 我的桌子: 我有3个问题与此代码: 1-过滤器不工作。如果我点击命令链接,页面会重新加载,但没有任何内容被过滤。可能是因为#form\: filteredTable\:statusColumn_filter'). val()返回未定义。所以我想我没有设置过滤器的值(对吗?