2012-03-26 7 views
3
<apex:outputField rendered="{!(WidgetType.contains('mywidget1'))}" /> 

Wenn ich das tue ich einen Fehler ...Verwenden String.contains in einer Apex Seite

Error: Unknown function WidgetType.contains. Check spelling

... obwohl die WidgetType einen String zurückgibt!

Es wird mich lassen dies zwar tun ...

rendered="{!(WidgetType == 'mywidget1')}"

Hier wird die Eigenschaft in der Steuerung ist ...

public String getWidgetType() { 
    return Settings.getWidgetType(); 
} 

Antwort

7

Schauen Sie sich die CONTAINS Funktion documentation (klebte unten).


Beschreibung

Vergleicht zwei Argumente von Text und liefert TRUE, falls das erste Argument das zweite Argument enthält. Wenn nicht, gibt FALSE zurück.

Das folgende Beispiel überprüft den Inhalt eines benutzerdefinierten Textfelds namens Product_Type und gibt "Parts" für jedes Produkt mit dem Wort "part" zurück. Ansonsten kehrt „Service“. {!IF(contains(opportunity.Product_Type__c, "part"), "Parts", "Service")}

Diese Funktion ist Groß- und Kleinschreibung so sicher sein, Ihr compare_text Wert die korrekte Aktivierung hat.

Verwenden

CONTAINS(text, compare_text) und Text mit dem Text ersetzen, die den Wert compare_text enthält.


In Ihrem Fall würden Sie es wie folgt verwenden müssen:

<apex:outputField rendered="{!(CONTAINS(WidgetType,'mywidget1'))}" /> 
+2

Das stimmt. Sie können APEX-Methoden (benutzerdefiniert oder nicht) auf einer VF-Seite nicht verwenden, aber Sie können Funktionen verwenden (die für Formelfelder verfügbar sind). – barelyknown

+1

Wenn Sie eine Apex-Methode immer aus JavaScript aufrufen möchten, verwenden Sie apex: actionFunction. – Adam

+1

Oder [JavaScript Remoting] (http://www.salesforce.com/us/developer/docs/pages/Content/pages_js_remoting.htm). :) –

0

<apex:outputPanel rendered="{!(contains('long_string','short_string_to_check'))}" />

Dies funktioniert für mich.