Comment appeler une méthode statique dans JSP / EL?

Je suis nouveau sur JSP. J’ai essayé de connecter MySQL et mes pages JSP et cela fonctionne bien. Mais voici ce que je devais faire. J’ai un atsortingbut de table appelé “balance”. Récupérez-le et utilisez-le pour calculer une nouvelle valeur appelée “montant”. (Je n’imprime pas “balance”).

 ID: ${row.id}
Passwd: ${row.passwd}
Amount:

Il semble impossible d’insérer des scriptlets dans les balises JSTL.

Vous ne pouvez pas appeler des méthodes statiques directement dans EL. EL n’invoquera que des méthodes d’instance.

En ce qui concerne votre tentative infructueuse de scriptlet , vous ne pouvez pas mélanger les scriptlets et EL. Utilisez l’un ou l’autre. Étant donné que les scriptlets sont découragés pendant une décennie, vous devriez vous en tenir à une solution uniquement EL.

Vous avez essentiellement 2 options (en supposant que l’ balance et le Calculate#getAmount() sont double ).

  1. Il suffit de l’envelopper dans une méthode d’instance.

     public double getAmount() { return Calculate.getAmount(balance); } 

    Et utilisez-le plutôt:

     Amount: ${row.amount} 

  2. Ou, déclarez Calculate#getAmount() comme une fonction EL. Commencez par créer un fichier /WEB-INF/functions.tld :

       Custom Functions 1.0 http://example.com/functions  calculateAmount com.example.Calculate double getAmount(double)   

    Et l’utiliser comme suit:

     <%@taglib uri="http://example.com/functions" prefix="f" %> ... Amount: ${f:calculateAmount(row.balance)}"> 

Une autre approche consiste à utiliser Spring SpEL:

 <%@taglib prefix="s" uri="http://www.springframework.org/tags" %>  Amount: ${rowBalance} 

Si vous sautez l’option var="rowBalance" alors affichera le résultat de l’expression à afficher.

Bean comme StaticInterface peut également être utilisé

  

et haricot

 package com.example.common; import com.example.common.Settings; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; @ManagedBean(name = "staticinterface") @ViewScoped public class StaticInterface { public StaticInterface() { } public void resetSettings() { Settings.reset(); } } 

EL 2.2 a un mécanisme intégré de méthodes d’appel. Plus ici: site Oracle . Mais il n’a pas access aux méthodes statiques. Bien que vous puissiez continuer à appeler, c’est par référence à un object. Mais j’utilise une autre solution, décrite dans cet article: Appeler une méthode statique à partir d’EL

Si vous utilisez struts2, vous pouvez utiliser

  

puis faites référence à ‘myVar’ dans l’atsortingbut html ou html tag en tant que ${myVar}

Sur la base de la réponse de @Lukas, vous pouvez utiliser cette méthode de haricot et d’appel par reflection:

 @ManagedBean (name = "staticCaller") @ApplicationScoped public class StaticCaller { private static final Logger LOGGER = Logger.getLogger(StaticCaller.class); /** * @param clazz * @param method * @return */ @SuppressWarnings("unchecked") public  E call(Ssortingng clazz, Ssortingng method, Object... objs){ final ClassLoader loader = Thread.currentThread().getContextClassLoader(); final List> clasesparamList = new ArrayList>(); final List objectParamList = new ArrayList(); if (objs != null && objs.length > 0){ for (final Object obj : objs){ clasesparamList.add(obj.getClass()); objectParamList.add(obj); } } try { final Class clase = loader.loadClass(clazz); final Method met = clase.getMethod(method, clasesparamList.toArray(new Class[clasesparamList.size()])); return (E) met.invoke(null, objectParamList.toArray()); } catch (ClassNotFoundException e) { LOGGER.error(e.getMessage(), e); } catch (InvocationTargetException e) { LOGGER.error(e.getMessage(), e); } catch (IllegalAccessException e) { LOGGER.error(e.getMessage(), e); } catch (IllegalArgumentException e) { LOGGER.error(e.getMessage(), e); } catch (NoSuchMethodException e) { LOGGER.error(e.getMessage(), e); } catch (SecurityException e) { LOGGER.error(e.getMessage(), e); } return null; } } 

xhtml, dans un bouton de commande par exemple:

  

Si votre classe Java est:

 package com.test.ejb.util; public class CommonUtilFunc { public static Ssortingng getStatusDesc(Ssortingng status){ if(status.equals("A")){ return "Active"; }else if(status.equals("I")){ return "Inactive"; }else{ return "Unknown"; } } } 

Ensuite, vous pouvez appeler la méthode statique ‘getStatusDesc’ ci-dessous dans la page JSP.

Utilisez JSTL useBean pour obtenir la classe en haut de la page JSP:

  

Ensuite, appelez la fonction où vous avez besoin d’utiliser Expression Language:

 
${cmnUtilFunc.getStatusDesc('A')}

Dans Struts2 ou Webwork2, vous pouvez utiliser ceci:

  

Ensuite, #tourLanguage référence à #tourLanguage dans votre jsp