jstl 调用 java 类_Java中是否有接口可以调用JSTL的表达式求值功能?

可以通过Commons-EL实现。

/*

* Licensed to the Apache Software Foundation (ASF) under one

* or more contributor license agreements.  See the NOTICE file

* distributed with this work for additional information

* regarding copyright ownership.  The ASF licenses this file

* to you under the Apache License, Version 2.0 (the

* "License"); you may not use this file except in compliance

* with the License.  You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing,

* software distributed under the License is distributed on an

* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

* KIND, either express or implied.  See the License for the

* specific language governing permissions and limitations

* under the License.

*/

package org.apache.commons.el;

import org.apache.commons.el.parser.ELParser;

import org.apache.commons.el.parser.ParseException;

import java.io.StringReader;

import java.io.IOException;

import javax.servlet.jsp.el.FunctionMapper;

import javax.servlet.jsp.el.VariableResolver;

import javax.servlet.jsp.el.ELException;

import junit.framework.TestCase;

public class ELTest extends TestCase {

private MockVariableResolver resolver;

private MockFunctionMapper mapper;

protected void setUp() {

this.resolver = new MockVariableResolver();

this.mapper = new MockFunctionMapper();

}

protected void tearDown() {

this.resolver = null;

this.mapper = null;

}

public void testMath() {

assertEquals("2", evaluate("${1 + 1}"));

assertEquals("5", evaluate("${10 - 5}"));

}

public void testLiteral() {

assertEquals("ac", evaluate("${'ac'}"));

assertEquals("\"", evaluate("${'\"'}"));

assertEquals("true", evaluate("${true}"));

}

public void testEL6() {

assertEquals("a''c", evaluate("${'a\\'\\'c'}"));

}

private String evaluate(String input) {

try {

StringReader rdr = new StringReader(input);

ELParser parser = new ELParser(rdr);

Object result = parser.ExpressionString();

if(result instanceof String) {

return (String) result;

} else if(result instanceof Expression) {

Expression expr = (Expression) result;

result = expr.evaluate(this.resolver, this.mapper);

return result == null ? null : result.toString();

} else if(result instanceof ExpressionString) {

Expression expr = (Expression) result;

result = expr.evaluate(this.resolver, this.mapper);

return result == null ? null : result.toString();

} else {

throw new RuntimeException("Incorrect type returned; not String, Expression or ExpressionString");

}

} catch(ParseException pe) {

throw new RuntimeException("ParseException thrown: " + pe.getMessage(), pe);

} catch(ELException ele) {

throw new RuntimeException("ELException thrown: " + ele.getMessage(), ele);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值