java – org.apache.jasper.JasperException:当未指定默认命名空间时,函数测试必须与前缀一起使用

前端之家收集整理的这篇文章主要介绍了java – org.apache.jasper.JasperException:当未指定默认命名空间时,函数测试必须与前缀一起使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为我的项目使用以下内容
Spring 3.0.1 Apache Tile 2.2.1 Glassfish 2.1.我想要做的是在jsp页面调用一些方法,并传递一些参数.例如,我有一个bean:
@Component
@Scope(value = "singleton")
public class TestBean {
    public void test(String param){
        System.out.println("param = " + param);
    }
}

我有一个jsp页面

<%@page contentType="text/html; charset=utf-8"%>
${testBean.test("hello")}

这段代码给了我一个例外:

org.apache.jasper.JasperException: The function test must be used with
a prefix when a default namespace is not specified

如果我调用一些方法而不传递参数 – 一切都OK.

我试图将jboss-el.jar放在我的WEB-INF / lib中,并将所需参数放在web.xml中(如here所述),但不起作用.

我只限于上面列出的一组技术,所以我无法添加任何东西,或者例如,不能更改我的应用服务器的版本.

有了这些条件,我的问题有解决方案吗?

解决方法

org.apache.jasper.JasperException: The function test must be used with a prefix when a default namespace is not specified

这表明环境不支持使用参数调用bean方法的新EL 2.2功能.过时的环境正在尝试将表达式解释为具有符号命名空间的EL函数:functionName()(如JSTL函数).例外只是抱怨命名空间:部分找不到以识别EL功能.但毕竟是错的.

您需要确保满足以下条件才能使用EL中的参数调用bean方法

>目标容器必须支持EL 2.2.所有Servlet 3.0兼容的容器都可以做,因为EL 2.2是Java EE 6的一部分,而这也是Servlet 3.0的一部分. Servlet 3.0容器的示例是Tomcat 7.x,Glassfish 3.x和JBoss AS 6.x / 7.x.
> /WEB-INF/web.xml文件声明符合Servlet 3.0规范(因此不是较老的,如2.5).

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    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-app_3_0.xsd"
    version="3.0">

    <!-- Config here. -->

</web-app>

否则,您的容器将运行在与web.xml根声明中匹配的版本的后备模式中,特此将丢失所有新的Servlet 3.0和EL 2.2.
> webapp / WEB-INF / lib不包含源自较早版本的容器的容器特定的EL实现库,例如源自Tomcat 6.x的el-api.jar和/或el-impl.jar或者.

您的具体问题是由使用非Servlet 3.0兼容的容器引起的:旧Glassfish 2.x.

升级Glassfish 3.x或寻找替代方法. JBoss EL方法仅适用于JSF,而不适用于Spring或“plain JSP”.

原文链接:/java/124288.html

猜你在找的Java相关文章