How to create a custom EL function to invoke a static method?

First create a final class with a public static method which does exactly the job you want:

package com.example;

import java.util.Collection;

public final class Functions {

    private Functions() {
        // Hide constructor.

    public static boolean contains(Collection<Object> collection, Object item) {
        return collection.contains(item);


Then define it as a facelet-taglib in /WEB-INF/functions.taglib.xml:

<?xml version="1.0" encoding="UTF-8"?>

        <function-signature>boolean contains(java.util.Collection, java.lang.Object)</function-signature>

Then familarize Facelets with the new taglib in the existing /WEB-INF/web.xml:


(note: if you already have the javax.faces.FACELETS_LIBRARIES definied, then you can just add the new path semicolon separated)

Then define it in the Facelets XHTML file as new XML namespace:


Finally you can use it as intended:

rendered="#{func:contains(bean.panels, 'u1')}"

As a completely different alternative, you can also include JBoss EL in your project. It works on Tomcat 6.0 and you’ll be able to invoke non-getter methods in EL. Drop jboss-el.jar file in /WEB-INF/lib and add the following to your web.xml:


Since EL 2.2 there’s another approach: create an @ApplicationScoped bean with methods in turn referring to those static functions. See also a.o. Utility methods in application scoped bean.

Leave a Comment