2010-10-08 19 views
7

Parece que estoy teniendo un montón de preguntas relacionadas con JSF en estos días ... aquí va otra vez: ¿por qué la llamada AJAX declarada con f:ajax publica todos los campos del formulario y no solo los declarados con execute? Esta pregunta was already asked en los foros de Sun, pero como están ahora cerrados no puedo responder allí. El hilo es un trozo sin una respuesta real a esto.JSF 2.0: ¿Por qué f: ajax envía todos los campos de formulario y no solo los marcados con execute-attribute?

¿Cuál es el punto de enviar todos los campos del formulario si necesito usar solo algunos de ellos?

+2

FYI: abrió un billete para esto: http://java.net/jira/browse/JAVASERVERFACES-1908 –

Respuesta

5

Acabo de comprobar el ticket JSF que Tuuka había publicado en enero de 2011. Dijo que este comportamiento (el envío de todos los campos de formulario) es consistente con la especificación JSF, y el problema se cerró.

Los desarrolladores de JSF han publicado un aviso de cambio de especificaciones que debería modificarse en una próxima especificación. Este tenía una fecha de 31 de enero de 2013. https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1098

"f:. Ajax no obedece a la 'ejecutar' atributo pero siempre envía todos los campos de un formulario Mojarra, sin embargo, sólo se procesa la lista campos como supuestos. Sin embargo, los campos sobrantes no se deben enviar porque aumenta el tamaño de la solicitud. "

"Estado: Prioridad abierta: mayor"

1

No estoy 100% seguro, pero esto podría ser un error en Mojarra. Ver a similar question about the special @all keyword.

En resumen: Mojarra no obedece la lista de formularios ingresados ​​para el atributo execute de f:ajax pero siempre envía solo el formulario adjunto. Lo mismo se aplica probablemente a un nivel de campo más detallado también: Mojarra no obedece al atributo de ejecución al elegir qué campos enviar, sino que simplemente los envía a todos. Sin embargo, obedece al atributo de ejecución al procesar los datos en el lado del servidor.

¿Alguien puede probar si el comportamiento difiere de esto con Apache Myfaces?

2

Esto parece ser un error en el jsf.js La función getViewState devuelve todos los parámetros (en lugar de filtrarlos), que luego se envían al servidor en la cadena de solicitud.

ejemplo: j_idt15 = j_idt15 & j_idt15% 3Avalue1 = 4,444 & j_idt15% 3Avalue2 = 555 & j_idt15% 3Avalue3 = 6,664 & javax.faces.ViewState = -6275268178907195611% 3A5276476001199934151 & javax.faces.source = j_idt15% 3Avalue1 & javax.faces.partial.event = difuminar & javax.faces.partial.execute = j_idt15% 3Avalue1% 20j_idt15% 3Avalue1 & javax.faces.partial.render = value1out & javax.faces.partial.ajax = true

Aquí puedes ver que aunque javax.faces.partial.execute es corre ctly especificado como: j_idt15: value1, la solicitud todavía contiene todos los valores

+0

Así que el error reside en javascript nivel - es por eso que funciona en el nivel de Java (JSF solo establece los campos de bean marcados con 'execute' a pesar de todos los campos enviados).Tenga en cuenta que el error no solo trata de filtrar los campos correctos, si dos o más formas diferentes son específicas de 'execute', solo los campos en el formulario de envoltura aún se envían. Entonces es un problema un poco más grande. Voy a levantar un boleto para esto en el rastreador de Mojarra una vez que esté disponible de nuevo después de la migración de infraestructura en curso. –

+0

Hmm, parece que olvidé aceptar esto hace siglos. ¡Escogiéndolo ahora! –

Cuestiones relacionadas