JSP | Expression Language | wie Werte aus Klasse ausgeben?

Kryptaesthesie

Erfahrenes Mitglied
Hallo zusammen!

Ich würde gerne in der JSP via Expression Language auf die Konstante ONE und die Methode getVal aufrufen (also den Wert ausgeben)

Code:
<%@ taglib prefix="hes" uri="http://www.hesgdv.de/tools/taglib/hesTagLib"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<%
    class MyOne {
        
        public static final int ONE = 1;
        
        private String val = "";
    
        public MyOne(String val) {
            this.val = val;
        }
        
        public String getVal() {
            return this.val;
        }
    }

    MyOne mo = new MyOne("EINS");
    
    request.setAttribute("myone", mo);
    
%>


<html>
    <head>
    </head>
    
    <body>
        ${requestScope.myone.val}
    </bod>
</html>
Fehler:
javax.el.PropertyNotFoundException: Property 'val' not readable on type java.lang.String


Dass das alles so untereinander weggeschrieben ist, liegt nur daran, weil ich das mal ebend testen möchte! :)

Wie komme ich an die beiden oben beschriebenen Werte?


Danke schon mal für eure Mühe!
Gruß
Gerrit
 
Hallo,

AFAIK müssen Klassen die du per EL "anfasst" public sein:
So funktioniert dein Beispiel...
Java:
<%@page contentType="text/html" pageEncoding="UTF-8"  %>
<%@ taglib uri="WEB-INF/tld/taglib.xml" prefix="ml"%>
<html><head><title>JSP Page</title></head>
<body><jsp:useBean id="bubu" class="de.tutorials.Bubu">
<% bubu.setFish("shark"); %>
</jsp:useBean><%= bubu.getFish() %>
<jsp:getProperty name="bubu" property="fish"/>
<ml:repeat times="3">test<br/></ml:repeat></body>


<form action="FromProcessor">
<select multiple="true">
    <input type="checkbox" value="DE" name="languages">DE</input><br/>
    <input type="checkbox" value="EN" name="languages">EN</input><br/>
    <input type="checkbox" value="FR" name="languages">FR</input><br/>
</select><br/>
<input type="submit">Absenden</input>
</form>
<%!
public static class MyOne {
        public static final int ONE = 1;
        public String val = "";
    
        public MyOne(String val) {
            this.val = val;
        }
        
        public String getVal() {
            return this.val;
        }
    }
%>

<%
   

    MyOne mo = new MyOne("yyy");
    
    request.setAttribute("myone", mo);
%>

<b>${requestScope.myone.val}</b>

</html>

Gruß Tom
 
Hey, vielen Dank für deine Hilfe! :)

Klappt auch soweit, aber wie kann ich auf die Konstante zugreifen?
Code:
${requestScope.myone.ONE}
klappt an dieser Stelle nicht...
Fehler:
Code:
javax.el.PropertyNotFoundException: Property 'ONE' not found on type de.hes.test.MyOne

Weißt du da auch Rat?
Danke schon mal!

Gruß
Gerrit



PS:

so funktioniert's leider auch nicht:
Code:
...
request.setAttribute("myone2", MyOne.class);
...
${requestScope.myone2.ONE}
 
Zuletzt bearbeitet:
Konstanten werden über die Klasse referenziert, nicht über eine Instanz. Das macht es für die EL schwer, diese aufzulösen - sprich: es geht nicht. Mir sind eigentlich nur Workarounds bekannt, z.B. dieser heir:

http://blog.tremend.ro/2006/08/07/accessing-java-constants-from-jstl/

oder halt sowas:
Java:
static
{
        CONSTANT_MAP = new HashMap();
        CONSTANT_MAP.put("beanPropSystem", BEAN_PROP_SYSTEM);
}

public Map getConstants()
{
        return CONSTANT_MAP;
}

XML:
<c:out value='${system.constants["beanPropSystem"]}'/>


Gruß
Ollie
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück