2012-04-14 5 views
0

Ich habe eine dynamische Suchseite geschrieben, um nach benutzerdefinierten Objektdatensätzen zu suchen. Ich verwende eine SOQL-Abfrage und binde die Ergebnisse an eine Datentabelle. Ich muss den Ausgabetext für eine der Spalten basierend auf dem zurückgegebenen Wert ändern.Visualforce -> Kann das Wertattribut "Apex: column" eine Funktion aufrufen, um das Angezeigte neu zu formatieren?

Beispiel: Wenn die SOQL „Tiger“ zurück, ich brauche „Animal“ anzuzeigen, Vogel für Adler, etc ....

Also ich denke, meine Frage ist, ob sein kann ich verwenden, um eine Javascript-Funktion in das Wertattribut von Apex: column? Etwas wie:

<apex:column value="renameObjectType({!mt.objectName__c})"> 

Und die renameObjectType Funktion ist so etwas wie:

function renameObjectType(val) 
      {    
       var inputtextvalue=val.value;    

       if(inputtextvalue.length>0) 
       { 
        if(inputtextvalue=="Tiger") 
        return "Animal";     
       } 

      }; 

Dies funktioniert nicht, wie ich es will ... Ist dies überhaupt möglich sein?

Danke, Calvin

Antwort

1

Dies spricht für die handliche wrapper class. JavaScript kann in Visualforce in Bezug auf die Ausführungsreihenfolge knifflig werden, da sowieso so viel hinter den Kulissen passiert. Wenn Sie noch nicht auf einer Standard-Kontaktdetailseite Quelle anzeigen aktiviert haben, können Sie sehen, wie viel browser-seitige Verarbeitung stattfindet.

Der sicherste, schnellste und vorhersehbarste Weg für solche Dinge ist Apex, imo.

+0

Danke für die Antwort mein Freund. Ich mache etwas Ähnliches und ich wollte sehen, ob ich das stattdessen im Visualforce-Code machen könnte. Jetzt, bevor ich die SOQL-Ergebnisse in meiner Liste gespeichert habe, deren Typ eine Wrapper-Klasse ist, überprüfe ich das Objekt, um zu sehen, ob der Wert etwas ist, das ich ersetzen muss. Also ist das der beste und empfohlene Weg? Ich dachte, vielleicht könnte ich einen Wert ersetzen, kurz bevor er angezeigt wird, ohne etwas ersetzen zu müssen und es bestehen zu lassen. –

+0

Ich persönlich bevorzuge die Verwendung von Apex, wenn die erforderliche Funktionalität im Rahmen dessen liegt, wofür Apex entwickelt wurde. In Bezug auf das Fortbestehen bin ich mir nicht sicher, was Sie meinen, oder zumindest über das Fortbestehen der aktuellen Sitzung hinaus. Ein temporäres Mitglied eines Wrappers (wie String) ist nur so lange am Leben, wie es benötigt wird, um angezeigt zu werden. Aber um Ihre Frage anders zu beantworten, können Sie absolut alles handhaben, was Sie in JavaScript handhaben möchten. Es hat nur eine schwere Basisarbeit, mit der der Browser sowieso beauftragt ist, also vermeide ich es, diese Verarbeitung hinzuzufügen, wenn Apex den Job gut verarbeitet. – Adam

+0

Ok vielen Dank, dass Sie das klarer machen. –

1

Eines der Dinge zu realisieren ist, dass jedes Mal, wenn Sie einen Wert von Ihrem Controller (unter Verwendung der {!myApexVariable} Syntax) zusammenführen, Visualforce tatsächlich ruft die Getter für diese Variable.

Das heißt, wenn Sie eine Variable auf diese Weise zusammenführen, rufen Sie bereits eine Funktion auf. In der Tat können Sie "Trick" Visual in einfach die Anzeige des Wertes einer Funktion mit dem folgenden:

* My_VF_Page.page *

<apex:outputText value="{!MyFormattedValue}" /> 

* My_VF_Controller.apex *

public String getMyFormattedValue() { 
    if (someOtherValue== null || someOtherValue== '') { 
     return "N/A"; 
    } 
    return someOtherValue; 
} 

Was Beim Laden der Visualforce-Seite werden Sie feststellen, dass die Datei jedes Mal ausgeführt wird, wenn die Seite Informationen über MyFormattedValue abrufen muss. Ich habe diesen Trick unglaublich nützlich für die Ausgabe der Werte von Funktionen gefunden.

Verwandte Themen