El中调用静态方法

最近在项目中遇到需要调用静态方法的问题,形如:

<c:forEach items="beans" var="bean">
    <p>总数:${com.example.Tools.getTotal(bean.nums)}</p>
</c:forEach>

不过上面的代码不能通过编译,只能寻求其他办法。经过查阅各种文档,找到了3种解决办法。

1,直接为Bean创建一个get方法

public double getTotal(){
       return com.example.Tools.getTotal(nums);
}

然后在EL中直接使用:

总数:${bean.total}

2,将Tools#getTotal创建为一个EL function。首先创建一个/WEB-INF/my.tld文件:

<?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>my</short-name><!--short-name元素可不写 -->
    <uri>http://example.com/functions</uri>

    <function>
        <name>calculateTotal</name>
        <function-class>com.example.Tools</function-class>
        <function-signature>double getTotal(double[])</function-signature>
    </function>
</taglib>

然后在web.xml中定义uri和tld文件路径的映射:

<jsp-config>
    <taglib>
        <taglib-uri>http://example.com/functions</taglib-uri>
        <taglib-location>/WEB-INF/my.tld</taglib-location>
    </taglib>
</jsp-config>   

接着在要使用的jsp头部引入该taglib:

<%@ taglib uri="http://example.com/functions" prefix="my" %> 

其中uri对应web.xml中的taglib-uri。最后就可以在EL中使用该函数了:

<c:forEach items="beans" var="bean">
    <p>总数:${my:calculateTotal(bean.nums)}</p>
</c:forEach>

3,使用Spring的SpEL:

jsp头部引入:

<%@taglib prefix="s" uri="http://www.springframework.org/tags" %>

使用:

<c:forEach items="beans" var="bean">
    <s:eval expression="T(com.example.Tools).getTotal(bean.nums)" var="total" />
    <p>总数:${total}</p>
</c:forEach>
时间: 2024-08-05 15:49:24

El中调用静态方法的相关文章

El中调用java静态方法

最近在项目中遇到需要调用静态方法的问题,形如: <c:forEach items="beans" var="bean"> <p>总数:${com.example.Tools.getTotal(bean.nums)}</p> </c:forEach> 不过上面的代码不能通过编译,只能寻求其他办法.经过查阅各种文档,找到了3种解决办法. 1,直接为Bean创建一个get方法 public double getTotal()

静态方法中调用非静态方法

静态static方法中不能调用非静态non-static方法,准确地说是不能直接调用non-static方法.但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-static方法. 在主函数(static方法)中我们经常创建某个类的实例,再利用其引用变量调用它的非静态方法. //StaticMethodTest.java//A ststic method cannot call a non-static method, but we can transfer a obje

入门: 使用JNI 从C++代码中调用Java的静态方法

开发环境: 操作系统: (uname -a output)  Linux ubuntu 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux JDK 版本 : (java -version) java version "1.7.0_51"OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubun

JniHelper调用java静态和非静态方法总结(即cocos2dx中调用android平台下显示第三方广告)

调用非静态方法首先就是调用的静态方法得到要调用的java的类对象然后通过调用minfo.env->CallVoidMethod(activityObj, minfo.methodID);方法把对象和要调用的方法以及参数(如果有 )传递个java类对象中的非静态方法: java类: // c++中調用的方法public static Object rtnActivity() {System.out.println("----------rtnActivity");return ma

PHP 父类静态方法中调用子类静态方法

get_called_class() 获取调用该方法的类,如果是在子类中调用父类方法,则返回子类的类名. 或者用static关键字: static::class 如果有多个子类,要在父类中调用子类方法,下面代码可实现: class parent{     abstract protected static function getFunc($action);    public static function call($action){      //调用子类静态方法,唯一的方式       

转:静态方法中调用非静态方法

我们都知道,静态static方法中不能调用非静态non-static方法,准确地说是不能直接调用non-static方法.但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-static方法. 其实这个事实的应用很经常,以至于我们不去重视:在主函数(static方法)中我们经常创建某个类的实例,再利用其饮用变量调用它的非静态方法. //StaticMethodTest.java//A ststic method cannot call a non-static metho

关于jpa的Specification自定义函数,实现oracle的decode;以及如何在静态方法中调用注入的service

如何在静态方法中调用注入的service Public class ClassA{ public static ClassA classA; @Resource private Service service; //原理时在工程启动时加载,在静态方法前加载,这样就可以在静态方法中调用注入的方法啦 @PostConstruct public void init() { classA = this; classA.service=service; }} 关于jpa的Specification自定义函

静态方法中调用实例方法的自产自销

public class SomeClass {     private string myfield = null;     public static SomeClass instance = new SomeClass();     public instranceMethod() {};     public static staticMethod() {}; }   public class AnotherClass {     public static Main()     {  

php中static和self调用静态方法区别

由于看到框架里面经常使用static::method() 于是稍微了解下static和self的区别 废话少说,直接上代码 class Father { public function __construct() { $this->init(); self::test(); } public static function test() { echo "father test....<br>"; } public function init() { echo 'fat