# Probleme mit Expression language ?



## wbott@freenet.d (10. Okt 2012)

Hallo zusammen,

ich habe ein Problem mit einer einfachen JSF-Anwendung:

[XML]<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"      
      xmlns:h="http://java.sun.com/jsf/html">
    <h:body>
      Der zweite Name ist #{injection.secondName}.
        <br/><br/>
      Das Objekt injection ist #{injection.toString()}.
        <br/><br/>
      Das Objekt namen ist #{injection.namen.toString()}.
    </h:body>
</html>[/XML]

mit den Mini-Sourcen:


```
package bean;
import javax.faces.bean.*;

@ManagedBean
@RequestScoped
public class Injection {

    @ManagedProperty(value="#{namen}")
    private Namen namen;
    
    public void setNamen(Namen namen) {
        this.namen=namen;
    }
    
    public Namen getNamen() {
        return namen;
    }

    public String getSecondName() {
        return namen.getListe().get(1);
    }
}
```

und 


```
package bean; 
import javax.faces.bean.*;
import java.util.*;

@ManagedBean
@ApplicationScoped
public class Namen {
    private ArrayList<String> meineNamen=new ArrayList<String>();

    public Namen() {
        meineNamen.add("Silke");
        meineNamen.add("Marvin");
        meineNamen.add("Pumuckl");
    }

    public int getAnzahl() {
        return meineNamen.size();
    }

    public List<String> getListe() {
        return meineNamen;
    }
}
```

gibt den Fehler (Run in Eclipse) (Siehe Dateianhang)

Ist das ein Problem mit der expression language?


----------



## Sym (10. Okt 2012)

Probiere mal
[xml]<?xml version="1.0" encoding="UTF-8" ?>[/xml]


----------



## wbott@freenet.d (10. Okt 2012)

danke, aber leider gleiches Ergebnis


----------



## Sym (10. Okt 2012)

Magst Du mal die gesamte Exception aus dem Log Deines Servers posten?

Tritt das Problem auch auf, wenn Du innerhalb des Body alles entfernst? Tritt es nur auf, wenn Du alle ELs nutzt? Was hast Du bisher probiert?


----------



## wbott@freenet.d (10. Okt 2012)

wenn ich den body-Inhalt entferne bekomme ich keinen Fehler, es wird dann eine leere Seite angezeigt.
Ich hab mich mit dem Fehler auf die Suche gemacht, daher die Vermutung, das es an EL liegen könnte.
Sonst habe ich mit Groß-/Klein-Schreibung experimentiert und bzgl. Hochkomma.
Ich hab auch andere xhtml geschrieben die funktionieren, aber hier, mit Dependency Injection erhalte ich die Fehler.

Stack Trace:
[XML]org.apache.el.parser.ParseException: Encountered " "(" "( "" at line 1, column 21.
Was expecting one of:
    "}" ...
    "." ...
    "[" ...
    ">" ...
    "gt" ...
    "<" ...
    "lt" ...
    ">=" ...
    "ge" ...
    "<=" ...
    "le" ...
    "==" ...
    "eq" ...
    "!=" ...
    "ne" ...
    "&&" ...
    "and" ...
    "||" ...
    "or" ...
    "*" ...
    "+" ...
    "-" ...
    "/" ...
    "div" ...
    "%" ...
    "mod" ...

	at org.apache.el.parser.ELParser.generateParseException(ELParser.java:2142)
	at org.apache.el.parser.ELParser.jj_consume_token(ELParser.java:2024)
	at org.apache.el.parser.ELParser.DeferredExpression(ELParser.java:113)
	at org.apache.el.parser.ELParser.CompositeExpression(ELParser.java:40)
	at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:114)
	at org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:172)
	at org.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:216)
	at org.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:68)
	at com.sun.faces.facelets.el.ELText$ELTextVariable.apply(ELText.java:197)
	at com.sun.faces.facelets.el.ELText$ELTextComposite.apply(ELText.java:178)
	at com.sun.faces.facelets.compiler.TextInstruction.apply(TextInstruction.java:93)
	at com.sun.faces.facelets.compiler.UIInstructionHandler.apply(UIInstructionHandler.java:137)
	at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:131)
	at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:162)
	at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:114)
	at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:94)
	at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:89)
	at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:94)
	at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:79)
	at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:148)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:734)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:96)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)[/XML]

Component Tree:
[XML]<UIViewRoot id="j_id1" inView="true" locale="de" renderKitId="HTML_BASIC" rendered="true" transient="false" viewId="/injection.xhtml">
<?xml version='1.0' encoding='UTF-8' ?>
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
</UIViewRoot>
[/XML]

Scoped Variables:
[XML]Application Attributes 
Name csfcff 
Value com.sun.faces.context.flash.ELFlash@19a9bea3 
[/XML]


----------



## Nogothrim (15. Okt 2012)

geht es mit 

[XML]Das Objekt injection ist #{injection.toString}.[/XML]

?


----------



## wbott@freenet.d (15. Okt 2012)

nein, leider nicht, es kommt dann der Fehler

[XML]

javax.el.ELException: /injection.xhtml: Property 'toString' not found on type bean.Injection

[/XML]


----------



## maki (15. Okt 2012)

[xml]Das Objekt injection ist #{injection}.[/xml]

"toString" ist keine Bean property, IMHO versucht die EL dann autmatisch die toString Methode aufzurufen (kann mich aber auch irren).

Wie dem auch sei, du kannst nur Beanproeprties ansprechen auf diese Art.


----------



## wbott@freenet.d (15. Okt 2012)

ja genau, deshalb wird toString() als Methode mit ....() angegeben.

[XML]
    <h:body>
        Der zweite Name ist #{injection.secondName}. 
        <br/><br/>
        Das Objekt injection ist #{injection.toString()}.
        <br/><br/>
        Das Objekt namen ist #{injection.namen.toString()}.
    </h:body>
[/XML]


----------



## maki (15. Okt 2012)

> ja genau, deshalb wird toString() als Methode mit ....() angegeben.


.. und deswegen bekommst du die Fehlermeldung, das geht nicht.


```
Encountered " "(" "( "" at line 1, column 21
```


----------



## wbott@freenet.d (15. Okt 2012)

angezeigt werden sollen die jeweiligen Hash-Codes dieser zwei Objekte.
Hast Du eventuell eine Idee wie man dies sonst formulieren müßte?


----------



## maki (15. Okt 2012)

.. als JavaBean Property eben.

Wenn dir das nix sagt wäre jetzt die Gelegenheit die Grundlagen nachzuholen


----------



## wbott@freenet.d (15. Okt 2012)

das sagt mir schon was, da habe ich wohl etwas falsch interpretiert.
Dann werd ich mich mal schlau machen


----------



## wbott@freenet.d (15. Okt 2012)

ok, hier also die Lösung (wen es interessiert):

injection.java:


```
...
    public String getHashcode() {
        return toString();
    }
...
```

namen.java:


```
...
    public String getHashcode() {
        return toString();
    }
...
```


injection.xhtml:
[XML]
...
    <h:body>
        Der zweite Name ist #{injection.secondName}. 
        <br/><br/>
        Das Objekt injection ist #{injection.hashcode}.
        <br/><br/>
        Das Objekt namen ist #{injection.namen.hashcode}.
    </h:body>
...
[/XML]


----------

