Calling a static method from EL
In my previous post I showed how to pass parameters in EL methods. In this post, I will describe how to call static methods from EL.
Step 1: Download Call.java and ELMethod.java
Download the classes Call.java and ELMethod.java, and copy them to your project.
Step 2: Add an instance of Call.java as an application scoped bean
There are many ways to do this, depending on this technology you are using. Here are some examples:
How to set request scope in JSP
request.setAttribute("call", new Call());
How to set session scope in JSP
session.setAttribute("call", new Call());
How to set application scope from Servlet
this.getServletContext().setAttribute("call", new Call())
How to set application scope from JSP
<jsp:useBean id="call" class="Call" scope="application" />
How to set application scope in Seam
Add these annotations to your class
@Name("call") @Scope(ScopeType.APPLICATION)
Step 3: Call any static method from EL as follows
Let’s say you have a static method which formats date. The method takes 2 arguments, the date format string and the Date object to format.
package com.mycompany.util; import java.text.SimpleDateFormat; import java.util.Date; public class DateUtils { public static String formatDate(String format, Date date) { return new SimpleDateFormat(format).format(date); } }
You can call the above static method from EL as follows. In the example below, “account” is a request scoped bean with a Date property called “creationDate” which needs to be formatted.
${call["com.mycompany.util.DateUtils.formatDate"]["MMM, dd"][account.creationDate]}
Just like the above example, you can call any static method (except overloaded methods). Simply pass the full class and method name as the first argument, and any parameters required by the method as subsequent arguments. In general, the format is:
${call["full.package.name.MethodName"][arg1][arg2][...]}
Note:
- Use map notation with [square brackets] when passing arguments to ${call}
- First argument is the full package name + “.” + method name
- If the static method you are calling takes arguments, simply pass those arguments using more [square brackets]
- Overloaded methods are not supported, i.e. you cannot call methods where two methods with the same name exist in the class
References
- Call.java source code from my Google code project
- ELMethod.java source code from my Google code project
- How to pass parameters in EL methods
Related posts: