2009-09-02 5 views
11

Ich versuche gerade, einige Front-End-Werte mit einigen serverseitigen Methoden (als eine Gruppe) zu validieren und stoße auf Probleme, die sich mit dem Ergebnis befassen.Wie man richtig auf das Datenfeld in einem a4j zugreift: jsFunction Ergebnis

Hier ist die XHTML für die Schaltfläche, die alles beginnt:

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

Und das Javascript, von denen ein Teil die Schaltfläche Anrufe, der andere Teil von dem die jsFunction

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

Anrufe und schließlich, die die jsFunction das problematische Stück ist:

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

das Problem ist, dass, um Am Ende dieser Kette von Ereignissen zeigt die Warnung (Daten) im Attribut 'oncomplete', dass die Daten nicht definiert sind. Ich muss dies definieren, um zu wissen, ob ein Warnungsdialog angezeigt werden soll oder nicht.

Ich kann bestätigen, dass die Bean.shouldBeConfirmed() -Methode tatsächlich ausgeführt wird, und mit den richtigen Parametern und in der Tat den richtigen Wert zurückgibt, und sogar den Wert der Bean.booleanResult-Variable (das ist eine normale Java-Boolean)). Was mache ich hier falsch?

Antwort

12

Obwohl dies eine sehr alte Frage ist, hatte ich das gleiche Problem mit Richfaces 4 M3. Von Yev vorgeschlagene Parameter funktionierten nicht. So bezogen auf Richfaces JIRA. wonach es ein Fehler ist (die in „nicht beheben“ -Modus ist, weiß nicht, warum!) So jetzt die Abhilfe ist event.data statt data im oncomplete Handler zu verwenden. Ich habe getestet und es funktioniert :)

+0

Dies ist bei weitem meine beliebteste Frage. Ich vermute, viele Leute haben dieses Problem. Prost für die Suche nach einem Workaround und vielen Dank für die Freigabe! – Ben

+0

Gern geschehen :) In der Tat ist es ein sehr häufiges Problem! Ich frage mich, warum die JBoss Community solche Fehler nicht an einem Ort dokumentiert. – Nikhil

+2

Warum nicht in den Migrationsleitfaden aufnehmen? Das hat mir sehr geholfen, danke. NICHT FIXED IN 4.1 – Toskan

2

Ich habe es genau wie Ihr Setup und es funktioniert für mich. Der einzige Unterschied ist, ich habe zusätzliche Attribute auf jsFunction:

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

Und meine Daten (Ihr booleanResult) ist ein int. Funktioniert gut.

1

Ich habe auch vor dem gleichen Problem .. Bei Booleschen Ergebnisse, die wir voll Methodennamen anstelle Entfernen Getter ... wie in Ihrem Fall schreiben müssen, sollte es sein # {Bean.isBooleanResult} .... Lassen Sie mich wissen, wenn Gesicht Problem ...

Verwandte Themen