2009-09-02 3 views
11

Actualmente estoy tratando de validar algunos valores de front-end con algunos métodos del lado del servidor (como grupo) y estoy teniendo problemas con el resultado.Cómo acceder correctamente al campo de datos en un resultado a4j: jsFunction

Aquí es el XHTML para el botón que inicia todo:

<h:commandButton action="#{Bean.save()}" 
     value="Save" 
      id="save" 
     onclick="checkForConfirmation();" /> 

Y el javascript, parte de la cual las llamadas de los botones, la otra parte de la cual el JsFunction llama

function checkForConfirmation() 
{ 
     var name = document.getElementById("path:to:name").value; 
     var address = document.getElementById("path:to:address").value; 
     var city = document.getElementById("path:to:city").value; 
     var state = document.getElementById("path:to:state").value; 
     var zip = document.getElementById("path:to:zip").value; 

     jsFunc1(name, address, city, state, zip); 
} 
function showConfirmPrompt() 
{ 
      if(confirm('Confirmation before save')) 
      { 
       return true; 
      } 

      return false; 
} 

Y finalmente, la jsFunction que es la pieza problemática:

<a4j:form> 
     <a4j:jsFunction name="jsFunc1" action="#{Bean.shouldBeConfirmed()}" data="#{Bean.booleanResult}" oncomplete="alert(data); if (data) {showConfirmPrompt();}"> 
      <a4j:actionparam name="param1" assignTo="#{Bean.nameToBeValidated}"/> 
      <a4j:actionparam name="param2" assignTo="#{Bean.addressToBeValidated}"/> 
      <a4j:actionparam name="param3" assignTo="#{Bean.cityToBeValidated}"/> 
      <a4j:actionparam name="param4" assignTo="#{Bean.stateToBeValidated}"/> 
      <a4j:actionparam name="param5" assignTo="#{Bean.zipToBeValidated}"/> 
     </a4j:jsFunction> 
    </a4j:form> 

El problema es que, para Al final de esta cadena de eventos, la alerta (datos) en el atributo 'oncomplete' muestra que los datos no están definidos. Necesito que esto se defina para saber si mostrar o no un diálogo de advertencia.

Puedo confirmar que el método Bean.shouldBeConfirmed() se está ejecutando realmente, y con los parámetros correctos, y de hecho devolviendo el valor correcto, e incluso estableciendo el valor de la variable Bean.booleanResult (que es un booleano java normal) ¿Qué estoy haciendo mal aquí?

Respuesta

12

Aunque esta es una pregunta muy antigua, tuve el mismo problema con Richfaces 4 M3. Los parámetros sugeridos por Yev no funcionaron. Por lo tanto, se lo refirió a richfaces's JIRA. De acuerdo con el cual, es un error (que se encuentra en modo "no va a arreglar", no sé por qué!) Así que por ahora la solución es utilizar event.data en lugar de data en el controlador oncomplete. He probado y funciona :)

+0

Esta es, de lejos, mi pregunta más popular. Supongo que mucha gente está teniendo este problema. ¡Saludos por encontrar una solución y gracias por compartirla! – Ben

+0

De nada :) De hecho, es un problema muy común. Me pregunto por qué la comunidad de JBoss no documenta problemas como este en un solo lugar. – Nikhil

+2

¿Por qué no incluirlo en su guía de migración? Esto me ayudó mucho, gracias. NO FIJO EN 4.1 – Toskan

2

Lo tengo exactamente como su configuración y me funciona. La única diferencia es que tengo atributos adicionales en JsFunction:

<a4j:form> 
    <a4j:jsFunction name="jsFunc1" 
     action="#{Bean.shouldBeConfirmed()}" 
     data="#{Bean.booleanResult}" 
     oncomplete="alert(data);" 
     ignoreDupResponses="true" 
     eventQueue="foo"> 
     ... 

Y mis datos (su booleanResult) es un int. Funciona bien.

1

tengo también enfrentan el mismo problema .. En caso de resultados de Boole tenemos que escribir el nombre completo método en lugar eliminando captador ... como en su caso, debería ser # {} Bean.isBooleanResult .... Avíseme si el problema de la cara ...

Cuestiones relacionadas