2009-09-02 8 views
11

Attualmente sto provando a convalidare alcuni valori front-end con alcuni metodi lato server (come gruppo) e sto riscontrando problemi relativi al risultato.Come accedere correttamente al campo dati in un risultato a4j: jsFunction

Ecco l'XHTML per il pulsante che inizia tutto:

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

E il javascript, parte del quale le chiamate di pulsanti, l'altra parte del quale il JsFunction chiama

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; 
} 

E infine, la jsFunction che è la parte problematica:

<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> 

Il problema è che, per verso la fine di questa catena di eventi, l'avviso (dati) nell'attributo 'oncomplete' mostra che i dati non sono definiti. Ho bisogno che questo sia definito per sapere se mostrare o meno un dialogo di avvertimento.

Posso confermare che il metodo Bean.shouldBeConfirmed() è effettivamente in esecuzione, con i parametri corretti, e in effetti restituendo il valore corretto, e anche impostando il valore della variabile Bean.booleanResult (che è un normale java booleano). Cosa sto facendo di sbagliato qui?

risposta

12

Anche se questa è una domanda molto vecchia, ho avuto lo stesso problema con M3 Richfaces 4. I parametri suggeriti da Yev non hanno funzionato. Così si è fatto riferimento a JIRA di Richfaces. Secondo la quale, si tratta di un bug (che è in modalità "non risolverà", non so perché!) Quindi per ora la soluzione è quella di utilizzare event.data invece di data nel gestore oncomplete. Ho provato e funziona :)

+0

Questa è di gran lunga la mia domanda più popolare. Immagino che molte persone abbiano questo problema. Saluti per trovare una soluzione alternativa e grazie per averlo condiviso! – Ben

+0

Prego :) Infatti è un problema molto comune! Mi chiedo perché la community di JBoss non documenta trucchi come questo in un unico posto. – Nikhil

+2

Perché non includerlo nella guida alla migrazione? Questo mi ha aiutato molto, grazie. NON FISSATO IN 4.1 – Toskan

2

L'ho esattamente come impostazione e funziona per me. L'unica differenza è, non ho gli attributi extra su JsFunction:

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

E i miei dati (il vostro booleanResult) è un int. Funziona bene.

1

ho anche affrontare lo stesso problema .. In caso di risultati booleani abbiamo bisogno di scrivere pieno nome del metodo, invece di rimuovere getter ... come nel tuo caso dovrebbe essere # {} Bean.isBooleanResult .... Fatemi sapere se il problema del viso ...