복붙노트

[SPRING] org.apache.jasper.JasperException : 기본 네임 스페이스가 지정되지 않은 경우 접두사와 함께 함수 테스트를 사용해야합니다.

SPRING

org.apache.jasper.JasperException : 기본 네임 스페이스가 지정되지 않은 경우 접두사와 함께 함수 테스트를 사용해야합니다.

내 프로젝트에 다음과 같은 것들을 사용하고있다 : Spring 3.0.1 + Apache Tiles 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")}

이 코드는 다음과 같은 예외를 제공합니다.

매개 변수를 전달하지 않고 일부 메서드를 호출하면 모든 것이 정상입니다.

jboss-el.jar를 WEB-INF / lib에 넣고 web.xml에 필요한 매개 변수를 넣으려고했습니다 (여기에 설명 된대로). 아무런 효과가 없습니다.

위에서 나열한 기술 집합으로 제한되어 있으므로 아무 것도 추가 할 수 없거나 예를 들어 내 app-server 버전을 변경할 수 없습니다.

이 모든 조건에서 내 문제에 대한 해결책이 있습니까?

해결법

  1. ==============================

    1.이것은 환경이 인수로 빈 메소드를 호출하는 새로운 EL 2.2 기능을 지원하지 않음을 나타냅니다. 구식 환경은 표현식을 네임 스페이스 : functionName ()과 같은 EL 함수로 해석하려고 시도하고 있습니다 (JSTL 함수처럼). 예외는 EL 함수를 식별하기 위해 네임 스페이스 : 부분을 찾을 수 없다는 것일뿐입니다. 결국 그것은 잘못되었습니다.

    이것은 환경이 인수로 빈 메소드를 호출하는 새로운 EL 2.2 기능을 지원하지 않음을 나타냅니다. 구식 환경은 표현식을 네임 스페이스 : functionName ()과 같은 EL 함수로 해석하려고 시도하고 있습니다 (JSTL 함수처럼). 예외는 EL 함수를 식별하기 위해 네임 스페이스 : 부분을 찾을 수 없다는 것일뿐입니다. 결국 그것은 잘못되었습니다.

    EL에 인수가있는 bean 메소드를 호출 할 수 있으려면 다음 조건이 충족되는지 확인해야합니다.

    구체적인 문제는 서블릿 3.0과 호환되지 않는 컨테이너 인 Old Glassfish 2.x를 사용함으로써 발생합니다.

    Glassfish 3.x로 업그레이드하거나 다른 방법을 찾으십시오. JBoss EL 접근 방식은 Spring이나 "일반 JSP"가 아닌 JSF에서만 작동합니다.

  2. ==============================

    2.el 2.2 및 servlet 3.0을 사용하는 경우에는 tomcat 7을 사용하십시오. 우리는 똑같은 문제에 직면하여 위의 버전으로 해결했습니다.

    el 2.2 및 servlet 3.0을 사용하는 경우에는 tomcat 7을 사용하십시오. 우리는 똑같은 문제에 직면하여 위의 버전으로 해결했습니다.

  3. ==============================

    3.Servlet 2.5에서 작업해야하기 때문에이 해킹을 만들었습니다.

    Servlet 2.5에서 작업해야하기 때문에이 해킹을 만들었습니다.

    JSP :

    ${testBean.test["hello"]}
    

    콩:

    private Map test;
    
    public Map getTest() {
        if (test == null) {
            test = new Map() {
                @Override
                public Object get(Object key) {
                    System.out.println("param = " + key);
                    return null;
                }
    
                @Override
                public int size() {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public boolean isEmpty() {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public boolean containsKey(Object key) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public boolean containsValue(Object value) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public Object put(Object key, Object value) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public Object remove(Object key) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public void putAll(Map m) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public void clear() {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public Set keySet() {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public Collection values() {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public Set entrySet() {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
            };
        }
        return test;
    }
    
  4. from https://stackoverflow.com/questions/13017348/org-apache-jasper-jasperexception-the-function-test-must-be-used-with-a-prefix by cc-by-sa and MIT license