Maison >Java >javaDidacticiel >Comment puis-je appeler des méthodes statiques dans JSP/EL ?

Comment puis-je appeler des méthodes statiques dans JSP/EL ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-20 11:20:02556parcourir

How can I invoke static methods in JSP/EL?

Appel de méthodes statiques en JSP/EL

En JSP, vous devez souvent effectuer des calculs ou accéder à des méthodes statiques à partir de classes Java. Cependant, l'appel de méthodes statiques directement dans Expression Language (EL) n'est pas pris en charge.

Scénario :

Vous disposez d'une table avec un attribut « solde » et souhaitez calculer une nouvelle valeur appelée "montant" en utilisant une méthode statique dans la classe "Calculer". Les scriptlets intégrés dans les balises JSTL, comme vous l'avez essayé, ne sont pas recommandés.

Restriction EL :

EL ne peut invoquer que des méthodes d'instance sur des classes que vous avez créées en tant que JavaBeans. . Les méthodes statiques, qui ne font pas partie d'une instance, ne sont pas directement accessibles via EL.

Solutions :

  1. Créer une instance Méthode :

    • Créer une méthode dans le bean qui encapsule la méthode statique, en transmettant les paramètres nécessaires.
    • Utilisez la méthode d'instance dans EL au lieu de la méthode statique.
  2. Enregistrez une fonction EL personnalisée :

    • Créer un fichier de descripteur de bibliothèque de balises (TLD) qui déclare un EL personnalisé fonction.
    • Configurez le fichier TLD dans votre page JSP à l'aide de la fonction <%@taglib...%> directive.
    • Utilisez la fonction EL personnalisée, qui appelle en interne la méthode statique, dans votre expression EL.

Exemple avec la méthode d'instance :

public class Bean {

    private double balance;

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

    // ...other methods
}
<c:forEach var="row" items="${rs.rows}">
    Amount: ${row.amount}  <!-- Invoke instance method -->
</c:forEach>

Exemple avec EL personnalisé Fonction :

<!-- functions.tld -->
<taglib>
    ...
    <function>
        <name>calculateAmount</name>
        <function-class>com.example.Calculate</function-class>
        <function-signature>double getAmount(double)</function-signature>
    </function>
    ...
</taglib>
<%@taglib uri="http://example.com/functions" prefix="f"%>
...
Amount: ${f:calculateAmount(row.balance)}  <!-- Invoke custom EL function -->

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn