Para no sobrecargar las llamadas al servidor desde el renderizado de la página jsf, podemos guardar valores dentro del componente ui:param de xmlns:ui="http://java.sun.com/jsf/facelets"
<ui:param name="path" value="../"/>
y en el resto de la página solamente llamaremos a #{path}
miércoles, 11 de julio de 2007
Pasar un parametro en jsf
Publicado por Juan Antonio Ruz en 5:32 0 comentarios
Categorías: JSF
martes, 10 de julio de 2007
Acceder a componente core.manager y core.ConversationEntries en PhaseId.INVOKE_APPLICATION
Para acceder a la lista de conversaciones desde nuestro código java y pretendemos hacerlo de la forma
@In
Manager manager
Nos dará error de illegalArgumentException cuando instancie el componente.
Para solucionarlo podemos acceder directamente con:
Manager manager = Manager.instance();
ConversationEntries conversationEntries = ConversationEntries.instance();
y de esta forma tendremos las conversaciones (ConversationEntry ) y toda su funcionalidad :
for(ConversationEntry idConversacion:conversationEntries.getConversationEntries()) {
if(idConversacion.isCurrent())log.error("cURRENT!!");
log.error("idConversacion_"+idConversacion.getId()+" view"+idConversacion.getViewId());
}
Publicado por Juan Antonio Ruz en 4:09 1 comentarios
Categorías: Seam 1.2, Soluciones
jueves, 5 de julio de 2007
Interfaces en ejb3, herencia
El componente Seam con estado tiene una interfaz pública por lo cual obtendremos un error si intentamos implementar varias interfaces solo desde la implementación y no desde la interface.
ej mal hecho--- > ERROR:
public interface CatalogoAction {
...
}
public class CatalogoActionImpl implements Serializable, CatalogoAction, ListadoResultados{
....
}
ej bien hecho:
public interface CatalogoAction extends ListadoResultados {
}
public class CatalogoActionImpl implements Serializable, CatalogoAction{
....
}
Publicado por Juan Antonio Ruz en 3:53 1 comentarios
Categorías: EJB, Seam 1.2, Soluciones
martes, 3 de julio de 2007
No funciona el estado del componente cuando se intenta cambiar un valor
Cuando intento cambiar una propiedad de un componente con estado a través de sus metodos get/setter que se definen en la interface, no funciona!
Tenía un problema con la etiqueta h:form, había 1 formulario dentro de otro y eso hacía el error
Publicado por Juan Antonio Ruz en 6:05 0 comentarios
Categorías: JSF, Seam 1.2, Soluciones
SelectOneMenu con entidades y valor nulo
<h:selectOneMenu value="#{search.category}">
<s:convertEntity />
<ui:remove> <f:selectItem itemLabel="Any" itemValue="#{anyCategory}" /></ui:remove>
<s:selectItems value="#{allCategories.resultList}" var="category"
label="#{category.name}"
noSelectionLabel="ANY" />
</h:selectOneMenu
Publicado por Juan Antonio Ruz en 5:10 0 comentarios
Recargar factoria de elementos al acabar una conversación
Para recargar una factoría de objetos que tendremos cargados en session para optimizar el rendimiento de la base de datos, podemos utilizar los eventos, los cuales al finalizar una tarea/conversación se pueden encargar de forma transparente (programación orientada a aspectos) de acceder a variables de otros componentes para su inicialización.
Ejemplo:
al finalizar un pedido de compra se necesita que el catalogo de productos muestre el stock actualizado.
public class CheckOutBean implements CheckOut, Serializable{
...
@End
@RaiseEvent("limpiarCatalogo")
public void enviarPedido() {
persist.order()
}
}
public class CatalogoBean implements Serializable, Catalogo {
...
@Observer("limpiarCatalogo")
public void limpiarPiezas(){
log.error("RESET CATALOGO ");
piezasList=null;
}
}
**** Esto puede parecer obvio, pero si lo que hacemos es recargar la colección en vex de limpiarla no funcionará, ya que la transacción depende de las phases de jsf, es decir que no se producirá la actualización hasta que no se salga de la PhaseId.INVOKE_APPLICATION.
Publicado por Juan Antonio Ruz en 2:33 0 comentarios
Categorías: AOP, Eventos, Seam 1.2, Soluciones
Eventos en Seam
Seam contempla varios modelos de eventos:
- JSF eventos
- <h:commandButton value="enviar" action="#{helloWorld.sayHello}"/>
- jBPM transition events (.jpdl), se especifican en la etiqueta event en la cual hay que definir el tipo de evento (node-enter, node-leave, process-start, process-end, task-create, task-assign, task-start, task-end, before-signal, after-signal). Hay que distinguir entre bussiness process (varios usuarios implicados) y pageflow (un usuario)
- <event type="">
- Seam page actions (pages.xml), se ejecutan antes del renderizado de una página
- <pages>
<page view-id="hello.jsp" action="#{helloWorld.sayHello}"/>
</pages> - Seam component-driven events
- se puede definir en el archivo components.xml o en el propio código java a través de anotaciones o referencias a componentes propios de Seam es decir Events.instance
- anotacion para observar un evento @Observer("nombreEvento")
- anotación para lanzar un evento @RaiseEvent("nombreEvento")
- Seam contextual events
- componentes Seam siempre instalados
- preSetVariable, postSetVariable, preRemoveVariable ...
se produce cuando el metodo devuelve un not-null y sin excepciones!
Publicado por Juan Antonio Ruz en 2:20 1 comentarios
Categorías: Seam 1.2
lunes, 2 de julio de 2007
¿qué es un pageflow?
Pageflow podríamos definirlo como definición de proceso o flujo de negocio. Para su representación se utiliza jPDL que tiene sintaxis XML y puede editarse gráficamente con un plugin de eclipse. En dicha representación se concretan los diferentes estados, decisiones, tareas, páginas web, etc con las cuales interactua el usuario.
Existen dos formas de definir un pageflow en Seam:
- Sin estado - faces-config.xml /pages.xml
- Con estado - jPDL
continuará ....
Publicado por Juan Antonio Ruz en 13:46 1 comentarios