Access static property or method in JSP via EL 3.0 (JEE7; Tomcat 8)

前端 未结 1 1465
野趣味
野趣味 2020-12-16 07:55

I\'m using tomcat 8.0.9 (servlet 3.1, jsp 2.3, el 3.0) and trying to access a static property from a jsp page like so:

${Boolean.TRUE}

Ther

相关标签:
1条回答
  • 2020-12-16 08:37

    UPDATE:

    There is a bug in Tomcat's (at least as of 8.0.9) jsp-api.jar. According to the change log, it is fixed in Tomcat version 8.0.15.

    As a workaround, in the apache-tomcat-8.0.9\lib folder replace jsp-api.jar with javax.servlet.jsp-api-2.3.2-b01.jar. Refresh the project in eclipse and you will see the output for

         Testing: ${Boolean.TRUE}
    

    as:

        Testing: true
    

    This was identified as a bug in GLASSFISH as well here.

    In order to access static fields or methods outside of the java.lang package, those specific packages or classes must be added to the EL context (also discussed by BalusC here).

    Here's an example allowing static access to classes in the java.time package for all jsp files in your web application:

    @WebListener
    public class Config implements ServletContextListener {
      @Override
      public void contextInitialized(ServletContextEvent event) {
        JspFactory.getDefaultFactory().getJspApplicationContext(event.getServletContext()).addELContextListener((ELContextEvent e) -> {
          e.getELContext().getImportHandler().importPackage("java.time");
        });
      }
    
      @Override
      public void contextDestroyed(ServletContextEvent event) {}
    }
    

    And now from the jsp, to return the current LocalDate, for example:

    ${LocalDate.now()}

    Note that ${java.time.LocalDate.now()} does not work.

    0 讨论(0)
提交回复
热议问题