Reset Datamodel
rccs Jul 2, 2009 3:45 AMHi Leo.
I have a datamodel that is loaded with a select to a table (category), and shown on a page (listarCategoria.xhtml), on the same page I do a search on the table (category), the datamodel is updated but only for view in the page (listarCategoria.xhtml), my problem is that when I choose one of the categories of result of the search, the datamodelseleccion is loaded with the object of the datamodel initial.
How can I update the datamodel?
Help me please.
¡¡¡¡¡¡Excuse my English is not very good.!!!!!
CategoriaAction.java
@Stateless
@Restrict("#{identity.loggedIn}")
@Name("categoriaAction")
public class CategoriaAccion implements CategoriasOP, Serializable{
@PersistenceContext(unitName="sysRec")
private EntityManager em;
@In
private FacesMessages facesMessages;
@DataModel(scope=ScopeType.PAGE)
private List<Categoria> listarCategorias=null;
@Factory("listarCategorias")
public void getListarCategorias(){
listarCategorias=null;
if(listarCategorias==null){
getNextListarCategorias();
}
}
public void getNextListarCategorias(){
if(categoria==null){
categoria=new Categoria();
categoria.setCateCodigo("");
categoria.setCateDescripcion("");
}
listarCategorias = em.createQuery("select c from Categoria c where " +
"lower(c.cateCodigo) like :search1 and " +
"lower(c.cateDescripcion) like :search2 " +
"order by c.cateCodigo asc")
.setParameter("search1", "%" + categoria.getCateCodigo() + "%")
.setParameter("search2", "%"+ categoria.getCateDescripcion() +"%")
.getResultList();
categoria =null;
}
@In(required=false)
private Categoria categoria = new Categoria();
public Categoria getCategoria(){
return categoria;
}
@DataModelSelection
private Categoria categoriaSeleccionada;
@In(required=false)
@Out(required=false, scope=ScopeType.SESSION)
private Categoria categoriaEditar;
public String insertar(){
listarCategorias=null;
em.persist(categoriaEditar);
getListarCategorias();
facesMessages.add("Registro guardado exitosamente");
return "regresar";
}
public String editar(){
listarCategorias=null;
flagNuevo=false;
categoriaEditar = categoriaSeleccionada;
return "editar";
}
public String guardar(){//guardar de editar
listarCategorias=null;
Categoria c = em.find(Categoria.class, categoriaEditar.getCateSec());
c.setCateCodigo(categoriaEditar.getCateCodigo());
c.setCateDescripcion(categoriaEditar.getCateDescripcion());
facesMessages.add("Registro actualizado exitosamente");
return "irCategoria";
}
public String eliminar(){
listarCategorias=null;
Categoria c = em.find(Categoria.class, categoriaEditar.getCateSec());
em.remove(c);
getListarCategorias();
facesMessages.add("Registro eliminado exitosamente");
return "regresar";
}
public String buscar(){
listarCategorias=null;
getListarCategorias();
return "irListar";
}
public String mostrar(){
listarCategorias=null;
categoriaEditar = categoriaSeleccionada;
return "irCategoria";
}
public String nuevo(){
listarCategorias=null;
categoriaEditar=new Categoria();
flagNuevo=true;
return "editar";
}
@Out(required=false, scope=ScopeType.SESSION)
private boolean flagNuevo;//verifica si se esta creando nuevo o editando
@In(required=false)
private String txtCodigo; //carga codigo para la busqueda
@In(required=false)
private String txtDescripcion;//carga codigo para la busqueda
}
ListarCategoria.xhtml
<ui:define name="cuerpo">
<h1>CATEGORIAS!</h1>
<h:form id="categoriaSearch" styleClass="edit">
<rich:simpleTogglePanel label="Buscar Categoria" switchType="ajax">
<s:decorate template="/layout/display.xhtml">
<ui:define name="label">Codigo</ui:define>
<h:inputText id="cateCodigo" value="#{categoria.cateCodigo}"/>
</s:decorate>
<s:decorate template="/layout/display.xhtml">
<ui:define name="label">Descripcion</ui:define>
<h:inputText id="cateDescripcion" value="#{categoria.cateDescripcion}"/>
</s:decorate>
</rich:simpleTogglePanel>
<div class="actionButtons">
<h:commandButton id="search" value="Buscar" action="#{categoriaAction.buscar}"/>
<s:button id="reset" value="Limpiar" includePageParams="false" action="#{categoriaAction.buscar}"/>
</div>
</h:form>
<rich:panel>
<f:facet name="header">Resultados de la Busqueda</f:facet>
<div class="results" id="categoriaList">
<h:form id="otra">
<h:outputText value="No se han encontrado resultados" rendered="#{listarCategorias.rowCount==0}" />
<rich:dataTable id="datos"
var="lista"
value="#{listarCategorias}" rows="10">
<rich:column sortBy="#{lista.cateSec}">
<f:facet name="header">Secuencial </f:facet>
<h:outputText value="#{lista.cateSec}"/>
</rich:column>
<rich:column sortBy="#{lista.cateCodigo}">
<f:facet name="header">Codigo</f:facet>
<h:outputText value="#{lista.cateCodigo}"/>
</rich:column>
<rich:column sortBy="#{lista.cateDescripcion}">
<f:facet name="header">Descripcion </f:facet>
<h:outputText value="#{lista.cateDescripcion}"/>
</rich:column>
<rich:column styleClass="action">
<f:facet name="header">Que desea Hacer</f:facet>
<s:link action="#{categoriaAction.editar}" value="Editar" ></s:link>
<s:link action="#{categoriaAction.mostrar}" value="ver" ></s:link>
</rich:column>
</rich:dataTable>
<rich:datascroller id="scroll" for="datos" rendered="#{listarCategorias.rowCount>10}"/>
</h:form>
</div>
</rich:panel>
<s:div styleClass="actionButtons">
<s:button action="#{categoriaAction.nuevo}"
id="crear"
propagation="none"
value="Crear Nueva Categoria">
</s:button>
</s:div>
</ui:define>