绑定f:loadBundle的JSF变量替换

时间:2011-05-28 23:15:09

标签: jsf variables

我正在尝试创建一个简单的JSF应用程序......

<!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>

但是,当我尝试在浏览器中运行该页面时,我得到值#{Message.username_label}。有人可以帮我理解为什么价值没有被替换到页面中吗?

2 个答案:

答案 0 :(得分:1)

那么,EL没有得到评估?当web.xml未正确声明符合至少 Servlet 2.4(对于JSF 1.0 / 1.1)或2.5(对于JSF 1.2)和/或您的类路径被旧版本污染时,可能会发生这种情况servletcontainer特定库。

由于您使用的是遗留JSP而不是其后继Facelets,我敢打赌您在Servlet 2.5容器(例如Tomcat 6.0)上使用JSF 1.2。在这种情况下,您需要确保web.xml声明如下:

<web-app 
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
    version="2.5"
>
    <!-- Your config here -->
</web-app>

此外,您还需要确保没有任何servletcontainer特定的库,如servlet-api.jarj2ee.jarjavaee.jarjsp-api.jar等。您的webapp的/WEB-INF/lib文件夹,或者更糟糕的是,在JRE/lib/ext文件夹中。摆脱它们,它们应该由servletcontainer本身提供,而不是你的webapp。 /WEB-INF/lib文件夹应该只包含JSF库和其他库特定的到webapp本身。

答案 1 :(得分:0)

对我来说很明显。不是java中的编译语句,因此核心的基础不能加密它。 id没有被编译,因为你在这些&lt;&gt;中有它你知道java吗?