Este método que genera la consulta para obtener el número de resultados posee varios errores/limitaciones a tener en cuenta.
1) Produce un error si la consulta contiene group by con más de un campo:
Este error se corrige modificando el código para que use count(*) en lugar de count(distinct + getGroupBy).
2) Aún corrigiendo lo anterior falla si la consulta posee más de un group by, ejemplo:
select e ..... where e.propiedad in (select o .... group by o.propiedad) group by e.propiedad.
La consulta anterior se podría resolver cambiando el group by de la subconsulta por distinct o.propiedad1,o.propiedad2 si sólo deseamos eliminar duplicados, pero en otro tipo de consultas que se necesite group by no sería posible.
miércoles, 29 de diciembre de 2010
viernes, 29 de octubre de 2010
Seam: Controlar conversaciones en la vista
Si queremos terminar una conversación mediante un enlace o botón hay que tener en cuenta lo siguiente:
- Si nuestra acción no produce una redirección a otra página no debemos usar ni <s:link> ni <s:button> ya que aunque indiquemos propagation="end", esto sólo introduce en la URL un parámetro que indica que se debe terminar la conversación y es en la navegación a la vista destino cuando se lee dicho parámetro y se termina la conversación. En su lugar usaremos <h:commandbutton>,<a4j:commandbutton>, <h:commandlink> o <a4j:commandlink> con la etiqueta <s:conversationpropagation type="end"> anidada.
lunes, 25 de octubre de 2010
JSF: Pasar acción como parámetro en panel modal
El escenario es el siguiente:
- Tengo un modal panel con un backbean/controlador de dicho moda panel
- Este modal panel se va a usar en distintas vistas
- Tiene una misma acción que en cada vista ejecuta un método distinto
Solución 1:
- Crear en el controlador un método para cada acción
- Enviar como parámetro o en cualquier propiedad del controlador la acción que se debe ejecutar
- En el modal panel deben existir un commandLink por cada acción y usar el parámetro anterior
para determinar cual renderizar
Solución 2(a probar):
- Pasar la acción como parámetro y usar la clase org.jboss.seam.core.Expressions para invocar el método.
lunes, 18 de octubre de 2010
JSF: Método para saber si una petición es postback
protected boolean isPostBack() {
FacesContext facesContext = FacesContext.getCurrentInstance();
return facesContext.getRenderKit().getResponseStateManager().isPostback(facesContext);
}
domingo, 5 de septiembre de 2010
JSF: Obtener ServletContext
Obtener el objeto ServletContext para obtener la ruta real de cualquier directorio de nuestra aplicación. Útil para guardar ficheros:
ExternalContext external = FacesContext.getCurrentInstance().getExternalContext();
ServletContext servletContext = (ServletContext) external.getContext();
String path = servletContext.getRealPath("/..");
ExternalContext external = FacesContext.getCurrentInstance().getExternalContext();
ServletContext servletContext = (ServletContext) external.getContext();
String path = servletContext.getRealPath("/..");
Suscribirse a:
Entradas (Atom)