You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Tim Watts <ti...@cliftonfarm.org> on 2017/04/10 15:35:45 UTC

Invoke methods in EL?

Environment: Tomcat 7.0.59; JRE 1.8.0_72

I suspect the answer to my problem is "You can't do that" but here goes:

A simple JSP that tries to get a Calendar instance and outputs the year:

<%@ page language="java" 
    contentType="text/html; 
    charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<body>
	<c:set var="X" value="${ java.util.Calendar.getInstance() }"/>
	<c:set var="Y" value="${ X.get(java.util.Calendar.YEAR) }"/>
	The year is ${ Y }
</body>
</html>

This presents a page that just says "The year is" but no year value.  Is
there some syntactical mojo I'm missing or is my best alternative to
resort to a scriptlet?  

(And for context, I actually want to do something along these lines in a
tag file.)



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Invoke methods in EL?

Posted by Tim Watts <ti...@cliftonfarm.org>.
Thanks Mark.  That does help.

On Mon, 2017-04-10 at 23:24 +0100, Mark Thomas wrote:
> On 10/04/17 16:35, Tim Watts wrote:
> > Environment: Tomcat 7.0.59; JRE 1.8.0_72
> > 
> > I suspect the answer to my problem is "You can't do that" but here goes:
> > 
> > A simple JSP that tries to get a Calendar instance and outputs the year:
> > 
> > <%@ page language="java" 
> >     contentType="text/html; 
> >     charset=UTF-8" pageEncoding="UTF-8"%>
> > <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
> > <!DOCTYPE html>
> > <html>
> > <body>
> > 	<c:set var="X" value="${ java.util.Calendar.getInstance() }"/>
> > 	<c:set var="Y" value="${ X.get(java.util.Calendar.YEAR) }"/>
> > 	The year is ${ Y }
> > </body>
> > </html>
> > 
> > This presents a page that just says "The year is" but no year value.  Is
> > there some syntactical mojo I'm missing or is my best alternative to
> > resort to a scriptlet?  
> > 
> > (And for context, I actually want to do something along these lines in a
> > tag file.)
> 
> You can do something like that but...
> 
> You'll need EL 3.0 which means Tomcat 8 minimum. I recommend 8.5.x in
> preference to 8.0.x.
> 
> EL doesn't let you specify the package in the expression. You have to
> explicitly import. With Tomcat, if you import the class into the JSP
> page that automatically imports it into the EL expression. (Whether
> Tomcat should do this or not is an open question with the EL Expert Group.)
> 
> Then factor in that EL only lets you reference static methods and fields
> on concrete classes (which means you can't use Calendar since it is
> abstract) and you get:
> 
> 
> <%@ page language="java"
>     import="java.util.Calendar,java.util.GregorianCalendar"
>     contentType="text/html;charset=UTF-8"
>     pageEncoding="UTF-8"%>
> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
> <!DOCTYPE html>
> <html>
> <body>
>         <c:set var="X" value="${ GregorianCalendar.getInstance() }"/>
>         <c:set var="Y" value="${ X.get(GregorianCalendar.YEAR) }"/>
>         The year is ${ Y }
> </body>
> </html>
> 
> 
> Drop the above test into a JSP page in the examples web application in
> Tomcat 8 onwards and you'll get the output you are looking for.
> 
> Note I tested this with 9.0.x but 8.x should behave the same way.
> 
> HTH,
> 
> Mark
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Invoke methods in EL?

Posted by Mark Thomas <ma...@apache.org>.
On 10/04/17 16:35, Tim Watts wrote:
> Environment: Tomcat 7.0.59; JRE 1.8.0_72
> 
> I suspect the answer to my problem is "You can't do that" but here goes:
> 
> A simple JSP that tries to get a Calendar instance and outputs the year:
> 
> <%@ page language="java" 
>     contentType="text/html; 
>     charset=UTF-8" pageEncoding="UTF-8"%>
> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
> <!DOCTYPE html>
> <html>
> <body>
> 	<c:set var="X" value="${ java.util.Calendar.getInstance() }"/>
> 	<c:set var="Y" value="${ X.get(java.util.Calendar.YEAR) }"/>
> 	The year is ${ Y }
> </body>
> </html>
> 
> This presents a page that just says "The year is" but no year value.  Is
> there some syntactical mojo I'm missing or is my best alternative to
> resort to a scriptlet?  
> 
> (And for context, I actually want to do something along these lines in a
> tag file.)

You can do something like that but...

You'll need EL 3.0 which means Tomcat 8 minimum. I recommend 8.5.x in
preference to 8.0.x.

EL doesn't let you specify the package in the expression. You have to
explicitly import. With Tomcat, if you import the class into the JSP
page that automatically imports it into the EL expression. (Whether
Tomcat should do this or not is an open question with the EL Expert Group.)

Then factor in that EL only lets you reference static methods and fields
on concrete classes (which means you can't use Calendar since it is
abstract) and you get:


<%@ page language="java"
    import="java.util.Calendar,java.util.GregorianCalendar"
    contentType="text/html;charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<body>
        <c:set var="X" value="${ GregorianCalendar.getInstance() }"/>
        <c:set var="Y" value="${ X.get(GregorianCalendar.YEAR) }"/>
        The year is ${ Y }
</body>
</html>


Drop the above test into a JSP page in the examples web application in
Tomcat 8 onwards and you'll get the output you are looking for.

Note I tested this with 9.0.x but 8.x should behave the same way.

HTH,

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org