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>