[Plone-conosur] Problema con un controller page template y su validador

Franco Pellegrini frapell en gmail.com
Jue Dic 11 23:14:38 UTC 2008


On Thu, Dec 11, 2008 at 3:01 PM, fa sanchez cabo <bikosfa en hotmail.com> wrote:
>
> Hola chicos a ver si me podeis ayudar con esto.
> Yo tengo 3 cpt que se controlan con un único controller validator.El caso es
> que los 3 son casi iguales y los tres tienen 3 botones iguales,uno para
> pasar a la siguiente pantalla,otro para volver a la anterior y otro para
> borrar los valores que se hayan introducido en los campos del formulario.
> En los 2 primeros cpt me funciona todo perfectamente pero en el tercero me
> salta el siguiente error cuando pulso el boton de volver o el de limpiar los
> campos.
> Los tres cpt tienen asignados las acciones y el validador bien.
> La forma de definir los botones en los 3 cpt es:
>
> -----------------------------------------------------------------------------------
>               <div class="formControls">
>               <input class="context" type="submit" tabindex=""
> name="form.button.Submit" value="Siguiente"
>               i18n:attributes="value" tal:attributes="tabindex
> tabindex/next;" />
>               <input class="context" type="submit" tabindex=""
> name="botonVolver" value="Volver"
>               i18n:attributes="value" tal:attributes="tabindex
> tabindex/next;" />
>               <input class="context" type="submit" tabindex=""
> name="botonLimpiar" value="Borrar campos"
>               i18n:attributes="value" tal:attributes="tabindex
> tabindex/next;" />
>               </div>
> ---------------------------------------------------------------------------------------
>
> La forma de controlarlos en el controller validator es :
> --------------------------------------------------------------------------------------
> if volver:
>        limpiarCampos(vieneDe)
>
> context.REQUEST.RESPONSE.redirect('./SMALLPOL/atestados/form_ActaAccidenteLaboral')
>
> elif borrar:
>        limpiarCampos(vieneDe)
>        if vieneDe=='implicados1':
>
> context.REQUEST.RESPONSE.redirect('./SMALLPOL/atestados/implicadosAcLab1')
>        if vieneDe=='implicados2':
>
> context.REQUEST.RESPONSE.redirect('./SMALLPOL/atestados/implicadosAcLab2')
>        if vieneDe=='implicados3':
>
> context.REQUEST.RESPONSE.redirect('./SMALLPOL/atestados/implicadosAcLab3')
>
> else:
> ---------------------------------------------------------------------------------------------------
> Y el error que me salta,ahora si,es el siguiente:
> ------------------------------------------------------------------------------------------------
> Time 2008/12/11 17:36:36.687 GMT+1
> User Name (User Id) admin (admin)
> Request URL http://localhost/SMALLPOL/atestados/implicadosAcLab3
> Exception Type ValueError
> Exception Value No next action found for
> implicadosAcLab3.success.Folder.None Metadata actions: ZMI actions:
> implicadosAcLab3.failure.None.None=traverse_to:string:implicadosAcLab2
> implicadosAcLab3.sucess.None.None=traverse_to:string:causasAcLab
> Traceback (innermost last):
>
> Module ZPublisher.Publish, line 119, in publish
> Module ZPublisher.mapply, line 88, in mapply
> Module ZPublisher.Publish, line 42, in call_object
> Module Products.CMFFormController.ControllerPageTemplate, line 74, in
> __call__
> Module Products.CMFFormController.BaseControllerPageTemplate, line 28, in
> _call
> Module Products.CMFFormController.ControllerBase, line 228, in getNext
> __traceback_info__: ['id = implicadosAcLab3', 'status = success',
> 'button=None', 'errors={}', 'context=<ATFolder at atestados>', 'kwargs={}',
> 'next_action=None', '']
>
> ValueError: No next action found for implicadosAcLab3.success.Folder.None
> Metadata actions: ZMI actions:
> implicadosAcLab3.failure.None.None=traverse_to:string:implicadosAcLab2
> implicadosAcLab3.sucess.None.None=traverse_to:string:causasAcLab
> -------------------------------------------------------------------------------------------------------------------------------
>
> GRACIAS CHICOS Y A VER SI ME PODEIS AYUDAR,CHAO.
>
> ________________________________
> Descárgate gratis el nuevo Windows Live Messenger
> _______________________________________________
> Plone-ConoSur mailing list
> Plone-ConoSur en lists.plone.org
> http://lists.plone.org/mailman/listinfo/plone-conosur
>
>

Me parece que el problema viene mas de la mano de los submits que de
los validadores.
Yo he hecho muy pocos formularios pero hay un par de cosas que veo y
por favor corrijame alguien si estoy MFT:

1) fijate que en el nombre del submit principal dice
"form.button.Submit", eso te indica el nombre del metodo que se
ejecuta al darle submit. En los otros botones tenes nombres que no
sugieren este comportamiento... fijate si por ahi viene la mano

2) Realmente necesitas hacer un formulario "por partes?" no podes
meter todo en uno solo con un submit abajo ?

3) mas relacionado con el traceback que te tiró, parece ser que no
sabe para donde seguir... fijate que tengas bien definidas, en el
archivo .metadata del formulario o del validador, las acciones
siguientes de acuerdo a si los resultados fueron exitosos o si algo
fallo.

4) Creo que no es buena practica (o no se si es buena practica o no, a
mi personalmente me parece feo) hacer formularios de a partes pasando
el contenido de formulario a formulario... en cada uno que pasas,
tenes que asegurarte de poner inputs hidden con el contenido del
formulario anterior, y es realmente engorroso...
que pasa si haces todo en un solo gran formulario, y lo "Separas" en 3
usando javascript. De esa forma, a nivel HTML es un solo formulario,
un solo submit, sin inputs hidden, y un solo validador.

Bueno, espero que se haya entendido.

Saludos y suerte con eso.
Franco

-- 
"I know not with what weapons World War III will be fought, but World
War IV will be fought with sticks and stones." -- Albert Einstein
--
"No se vive celebrando victorias, sino superando derrotas."
--
Linux User #456432
---------




Más información sobre la lista de distribución Plone-ConoSur