2011-05-28 70 views
2

我試圖創建一個簡單的JSF應用程序...與結合˚FJSF變量代換:loadBundle

<!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}。有人能幫我理解爲什麼價值沒有被替換到頁面中嗎?

回答

1

那麼,EL沒有得到評估?當web.xml未正確聲明符合至少 Servlet 2.4(適用於JSF 1.0/1.1)或2.5(適用於JSF 1.2)並且/或者您的類路徑被舊的版本化servlet容器特定庫污染時,可能會發生這種情況。由於您使用的是舊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庫和其他庫特定到web應用程序本身。

+0

謝謝。你是對的。在我固定到2.5後()正在工作! – user710818 2011-05-30 06:12:58

+0

不客氣。 – BalusC 2011-05-30 11:17:28

+0

我不得不將j2ee更改爲javaee,否則我在web.xml中出現「非空白字符不允許...」錯誤。 – javajavajava 2015-01-14 19:16:09

0

這對我很明顯。在Java中不是一個遵從的規則,因此核心不能對它進行加密。該編號沒有被編譯,因爲你在這些文件中有它。<>你知道java嗎?

+0

似乎只編譯了jsf部分。因爲如果我插入簡單的jsp表達式,現在的時間是<%= getDate()%> - 工作。 – user710818 2011-05-28 23:31:55

+0

oh .....好吧然後 – user722566 2011-05-28 23:40:01

+0

嘗試更改您的outputText值 – user722566 2011-05-28 23:40:33