I am trying to create a simple JSF application…
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>Login</title>
<f:loadBundle var="Message" basename="bundle.Messages" />
</head>
<body>
<f:view>
<h:form id="loginForm">
<h:message for="loginForm" />
<br />
<h:outputText value="#{Message.username_label}" ></h:outputText>
</h:form>
</f:view>
</body>
</html>
However, when I try to run the page in my browser, I get the value #{Message.username_label}. Could someone please help me to understand why the value was not substituted into the page?
So, EL doesn’t get evaluated? This can happen when the
web.xmlis not properly declared conform at least Servlet 2.4 (for JSF 1.0/1.1) or 2.5 (for JSF 1.2) and/or your classpath is polluted with old versioned servletcontainer specific libraries.Since you’re using legacy JSP instead of its successor Facelets, I’ll bet that you’re using JSF 1.2 on a Servlet 2.5 container (such as Tomcat 6.0). In this case, you need to ensure that the
web.xmlis declared as follows:In addition, you also need to ensure that you don’t have any servletcontainer specific libraries like
servlet-api.jar,j2ee.jar,javaee.jar,jsp-api.jar, etc.. in your webapp’s/WEB-INF/libfolder or, worse, in theJRE/lib/extfolder. Get rid of them, they are supposed to be supplied by the servletcontainer itself, not your webapp. The/WEB-INF/libfolder should contain only the JSF libraries and other libraries specific to the webapp itself.