Para los acostumbrados a struts-2 el acceso a métodos estáticos java desde una jsp sin usar scriptlets es una cosa bastante sencilla, en mi primer proyecto con SpringMVC tratar de hacer lo mismo, no me resultó fácil, seguramente por desconocimiento, al final la solución que aplicamos fué la siguiente:
Tenemos una clase WebFunctionsUtil.class con un método estático al que queremos acceder desde una jsp
public abstract class WebFunctionsUtil implements Serializable{ private static final long serialVersionUID = -7927671849323460147L; public static String getNameState(int state){ return "nombreOK"; } }
Añadimos al proyecto un archivo functions.tld donde definimos el nombre que usaremos para referirnos a la función especificando a que función java corresponde
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <display-name>Custom Functions</display-name> <tlib-version>1.0</tlib-version> <short-name>custom</short-name> <uri>http://copypasteexception.com/functions</uri> <function> <name>getOrderStateName</name> <function-class>com.copypasteexception.web.util.WebFunctionsUtil</function-class> <function-signature>String getNameState(int)</function-signature> </function> </taglib>
Finalmente indicamos en el web.xml que se debe cargar este fichero como una taglib
<jsp-config> <taglib> <taglib-uri>http://copypasteexception.com/functions</taglib-uri> <taglib-location>/WEB-INF/tld/functions.tld</taglib-location> </taglib> </jsp-config>
Para usar esta función en la jsp solo debemos cargar la taglib en ella, y llamar a la función
<%@taglib uri="http://copypasteexception.com/functions" prefix="cpe" %> <!-- ....... --> ${cpe:getNameState(1)} <!-- ....... -->