Probleme mit Expression language ?

wbott@freenet.d

Aktives Mitglied
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:

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

Java:
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?
 

Anhänge

  • EL-Fehler.JPG
    EL-Fehler.JPG
    46 KB · Aufrufe: 37
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?
 
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]
 
[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.
 
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]
 
.. als JavaBean Property eben.

Wenn dir das nix sagt wäre jetzt die Gelegenheit die Grundlagen nachzuholen 😉
 
ok, hier also die Lösung (wen es interessiert):

injection.java:

Java:
...
    public String getHashcode() {
        return toString();
    }
...

namen.java:

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]
 

Zurück
Oben