--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.
--www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.
No podr�a saber si agregaste otro begin, o si cambiaste el/los que
ten�as. Sin embargo, aclaro que no se trata de solo agregar otro/s
@Begin(join=true). Probablemente, el @Begin que est� generando el error,
no es el que pens�s, sino otro que se te est� pasando por alto. Revis�
los l�mites que pusiste a la conversaci�n. Como dije antes, �ten�s
pages.xml? �O una page de p�gina (pagina.page.xml)? �O solo ten�s
anotaciones para controlar la conversaci�n? �O un poco y un poco?
Cuidado, elige una sola alternativa, para evitar confusiones luego. De
�ltima, pon� m�todos inicializaci�n vac�os en los beans anotados con
@Create, para ponerle breakpoints y poder depurarlo.
Revis� muy bien todos los begin que tengas, sean de anotaciones o de
otro tipo. Si los begin/end fueron puestos sin un criterio, te
recomiendo quitarlos todos, y repensar para qu� incluirlos. Repas� antes
el cap�tulo de manejo de conversaciones de la documentaci�n de Seam para
quitarte cualquier duda, es relativamente simple el concepto, pero mal
aplicado te va a volver loco, cuando bien aprovechado es una
caracter�stica clave y fundamental de Seam.
Hazte esta pregunta: �porqu� iniciar una conversaci�n extendida (con
begin/end) en primer lugar? Si no hace falta, eliminarla. Si hace falta
para mantener el estado de X bean/s desde el punto A hasta el punto B,
entonces limitar la conversaci�n a esos puntos. Aprovecha la p�gina de
debug.seam (estando el debug habilitado para seam en components.xml)
para comprender e inspeccionar las conversaciones en curso y su estado.
Algunos consejos varios con Seam 2: suele ser com�n que tengas un back
bean para la p�gina, y si esa p�gina necesita mantener el estado entre
varios request, suele crearse un m�todo de inicializaci�n (como init())
anotado con @Create y con @Begin(join=true). Personalmente, prefiero
anotarlo solo con @Create, y usar el pages de la vista (p�gina) para
poner el elemento <begin-conversation join="true"/>. Luego, en el m�todo
que guarde/borre/acualice/etc que deba terminar la conversaci�n, poner
el @End (mejor usar pages, y en el action o rule correspondiente poner
el elemento <end-conversation/>).
�Porqu� es mejor hacerlo desde el pages.xml en lugar de las anotaciones
(a excepci�n de casi cualquier otro aspecto de Seam)? Porque junto con
las decisiones del alcance de la conversaci�n, suelen ir las decisiones
de navegaci�n, las reglas, los pages-flow/jbpm, y as�, todo lo que es
mejor manejarlo por pages.xml. Hacerlo en el/los pages, te brinda m�s
control y opciones que hacerlo con anotaciones. Y hacerlo mixto solo
genera confusiones. Y menos a�n hacerlo por c�digo, es la peor pesadilla.
A veces al terminar la conversaci�n, se hace un redirect a la misma u a
otra p�gina. Si al hacerlo, necesit�s acceder a alg�n estado/mensaje de
la conversaci�n "que se est� cerrando", us� el before-redirect = true/false.
El <redirect/> es muy usado para ciertas cosas, no solo para ir a otra
p�gina (evidentemente), sino para aplicar el patr�n post-and-redirect.
JSF hace post-back para todo, lamentablemente, pero con el patr�n
post-and-redirect se evitan much�simas complicaciones del back-button.
En el mismo sentido, los componente s:link y s:button (extensiones de
Seam a JSF) aunque sin brindar submit del formulario, son muy �tiles
para los casos donde aplican. Si los us�s, prest� atenci�n al atributo
propagation que afecta al alcance de la conversaci�n.
Prob� bastante con los ejemplos que trae Seam. Hay muchos y muy buenos,
y los hay para todos las necesidades imaginables. Tiene aplicaciones
completas reales. Vas a sacar muchas ideas y a comprender mejor todas
las bondades del framework.
Slds.-
Pablo
El 14/11/11 17:33, Simon Alberto Rodriguez Pacheco escribió:
El error aparece.. pero no te dice en que metodo colocar un @Begin(join = true)
, se lo coloco al metodo que llamo .. y sigue apareciendo.. no se a que otro metodo colocarle.. estpoy perdido
No podría saber si agregaste otro begin, o si cambiaste el/los que tenías. Sin embargo, aclaro que no se trata de solo agregar otro/s @Begin(join=true). Probablemente, el @Begin que está generando el error, no es el que pensás, sino otro que se te está pasando por alto. Revisá los límites que pusiste a la conversación. Como dije antes, ¿tenés pages.xml? ¿O una page de página (pagina.page.xml)? ¿O solo tenés anotaciones para controlar la conversación? ¿O un poco y un poco? Cuidado, elige una sola alternativa, para evitar confusiones luego. De última, poné métodos inicialización vacíos en los beans anotados con @Create, para ponerle breakpoints y poder depurarlo.
Revisá muy bien todos los begin que tengas, sean de anotaciones o de otro tipo. Si los begin/end fueron puestos sin un criterio, te recomiendo quitarlos todos, y repensar para qué incluirlos. Repasá antes el capítulo de manejo de conversaciones de la documentación de Seam para quitarte cualquier duda, es relativamente simple el concepto, pero mal aplicado te va a volver loco, cuando bien aprovechado es una característica clave y fundamental de Seam.
Hazte esta pregunta: ¿porqué iniciar una conversación extendida (con begin/end) en primer lugar? Si no hace falta, eliminarla. Si hace falta para mantener el estado de X bean/s desde el punto A hasta el punto B, entonces limitar la conversación a esos puntos. Aprovecha la página de debug.seam (estando el debug habilitado para seam en components.xml) para comprender e inspeccionar las conversaciones en curso y su estado.
Algunos consejos varios con Seam 2: suele ser común que tengas un back bean para la página, y si esa página necesita mantener el estado entre varios request, suele crearse un método de inicialización (como init()) anotado con @Create y con @Begin(join=true). Personalmente, prefiero anotarlo solo con @Create, y usar el pages de la vista (página) para poner el elemento <begin-conversation join="true"/>. Luego, en el método que guarde/borre/acualice/etc que deba terminar la conversación, poner el @End (mejor usar pages, y en el action o rule correspondiente poner el elemento <end-conversation/>).
¿Porqué es mejor hacerlo desde el pages.xml en lugar de las anotaciones (a excepción de casi cualquier otro aspecto de Seam)? Porque junto con las decisiones del alcance de la conversación, suelen ir las decisiones de navegación, las reglas, los pages-flow/jbpm, y así, todo lo que es mejor manejarlo por pages.xml. Hacerlo en el/los pages, te brinda más control y opciones que hacerlo con anotaciones. Y hacerlo mixto solo genera confusiones. Y menos aún hacerlo por código, es la peor pesadilla.
A veces al terminar la conversación, se hace un redirect a la misma u a otra página. Si al hacerlo, necesitás acceder a algún estado/mensaje de la conversación "que se está cerrando", usá el before-redirect = true/false.
El <redirect/> es muy usado para ciertas cosas, no solo para ir a otra página (evidentemente), sino para aplicar el patrón post-and-redirect. JSF hace post-back para todo, lamentablemente, pero con el patrón post-and-redirect se evitan muchísimas complicaciones del back-button. En el mismo sentido, los componente s:link y s:button (extensiones de Seam a JSF) aunque sin brindar submit del formulario, son muy útiles para los casos donde aplican. Si los usás, prestá atención al atributo propagation que afecta al alcance de la conversación.
Probá bastante con los ejemplos que trae Seam. Hay muchos y muy buenos, y los hay para todos las necesidades imaginables. Tiene aplicaciones completas reales. Vas a sacar muchas ideas y a comprender mejor todas las bondades del framework.
Slds.-
Pablo