2012-05-21 11 views
5

Come si chiama il metodo di un oggetto da EL?Esecuzione e metodo dell'oggetto da EL

conferire all'oggetto:

public class TestObj { 
    public testObj() { }; 

    public String test() { return "foo"; } 
    public String someOtherMethod(String param) { return param + "_bar"; } 
} 

e obj viene aggiunto alla pageContext

pageContext.setAttribute("t", new TestObj()); 

Come faccio a eseguire l'equivalente di:

<%= t.test() %> 
<%= t.someOtherMethod("foo") %> 

utilizzando EL?

+0

per chiunque altro soffre lo stesso stupido errore come me, notare le parentesi tonde per una chiamata di metodo a differenza di quadratura quelli per l'accesso liste, mappe, ecc –

risposta

8

E 'supportato dal momento che EL 2.2 che è stato fuori dal 10 dicembre 2009 (oltre 2,5 anni fa già!). EL 2.2 va di pari passo con le Servlet 3.0, quindi se si target un Servlet 3.0 contenitore (Tomcat 7, Glassfish 3, ecc) con una Servlet 3.0 compatibile web.xml che sembrano segue

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 

    <!-- Config here. --> 

</web-app> 

allora sarete in grado di richiamare metodi con o senza argomenti EL nelle seguenti forme:

${t.test()} 
${t.someOtherMethod('foo')} 
+0

Sembra che il mio contenitore stia utilizzando Servlet 2.3. Oh bene. – empire29

+0

Quindi stai usando per exampe Tomcat 5.0? Può anche accadere che tu stia effettivamente eseguendo Tomcat 7.0 ma che il 'web.xml' sia dichiarato in modo errato come Servlet 2.3 e che quindi Tomcat 7.0 venga eseguito in modalità di riserva Servlet 2.3. – BalusC

3

In base a questo Method calls in EL le chiamate di metodo in linguaggio di espressione sono attualmente in stato JSR e non sono ancora state implementate. Quello che uso sono le strutture JST per i componenti JavaBean per fare alcune invocazioni. Ad esempio, se si modifica la tua firma test metodo per:

public class TestObj { 
    public TestObj() { }; 

    public String getTest() { return "foo"; } 
} 

È possibile richiamare getTest() metodo con la seguente sintassi:

${t.test} 

Ora, se avete bisogno di qualcosa di più elaborato -come con il parametro passing- voi potrebbe utilizzare le funzioni del metodo personalizzato offerte da EL. Ciò richiede metodi statici pubblici dichiarati in una classe pubblica e anche un file TLD. Un bel tutorial può essere trovato here.

Aggiornamento:

Come @BalusC stati, le specifiche successive supportano ora chiamate di metodi. Se si sta distribuendo in un contenitore Java EE 6 compatibile, this Oracle Site mostra come utilizzare correttamente la funzione.

+1

Non sei aggiornato. – BalusC

+0

Non ne ero a conoscenza. Grazie per l'aggiornamento! –