2011-07-02 70 views
0

我沒有問題,加載和使用從位於網站的根JSP文件properties文件(使用ResourceBundle類),但是當我嘗試從它位於一個JSP加載相同properties文件目錄失敗,並說資源無法找到!頁面JSP資源包

代碼位於目錄中的

<%@page import="org.apache.log4j.Logger"%> 
<%@page import="com.persiangulfcup.utility.LogUtils"%> 
<%@page import="java.util.ResourceBundle"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<% 
    Logger logger = LogUtils.getLogger("page/contact"); 
    ResourceBundle lbls = null; 
    ResourceBundle msgs = null; 
    try { 
    lbls = ResourceBundle.getBundle("labels"); 
    msgs = ResourceBundle.getBundle("messages"); 
    } catch (Exception ex) { 
    logger.fatal(ex); 
    } 
%> 
<div class="form"> 
    <div style="text-align: left; font: normal bold 14px arial; cursor: pointer" onclick="contactBox.hide();">X</div> 
    <div style="padding-bottom: 10px;font-size: 14px; text-align: center"><%=msgs.getString("contactHeader")%></div> 
    <form id="frmContact" onsubmit="try {sendContact();} catch (e) {console.log(e)} return false;"> 
    <table class="form"> 
     <tr> 
     <td class="caption"><%=lbls.getString("name")%>: </td> 
     <td class="data"> 
      <input id="txtName" type="text" name="txtName"/> 
     </td> 
     </tr> 
     <tr> 
     <td class="caption"><%=lbls.getString("email")%>: </td> 
     <td class="data"> 
      <input id="txtEmail" type="text" name="txtEmail"/> 
     </td> 
     </tr> 
     <tr> 
     <td class="caption"><%=lbls.getString("subject")%>: </td> 
     <td class="data"> 
      <input id="txtSubject" type="text" name="txtSubject"/> 
     </td> 
     </tr> 
     <tr> 
     <td class="caption"><%=lbls.getString("message")%>: </td> 
     <td class="data"> 
      <textarea id="txtMessage" name="txtMessage"></textarea> 
     </td> 
     </tr> 
     <tr> 
     <td class="button" colspan="2"><input type="submit" value="<%=lbls.getString("send")%>"/></td>   
     </tr> 
     <tr> 
     <td style="text-align: center" colspan="2" id="brdContact"></td>   
     </tr> 
    </table> 
    </form> 
</div> 
+0

顯示代碼.. – Bozho

+0

Eeeek,scriptlets。使用JSTL fmt。 http://stackoverflow.com/questions/4276061/how-to-internationalize-a-java-web-application – BalusC

回答

6

這是因爲你不尊重一個黃金法則:不要放任何東西在默認的包。 資源包從類路徑中作爲類加載。它有一個完全合格的名稱,必須使用它來加載它。並且不能在缺省包中使用不在默認包中的類的默認包中的類。

因此,把你的資源包放在適當的包中(例如:com.persiangulfcup.foo.bar),然後像這樣加載它們:ResourceBundle.getBundle("com.persiangulfcup.foo.bar.labels")

也就是說,在JSP中使用scriptlet是一種不好的做法。你應該真的使用the JSTL,它有一個fmt庫允許使用資源包,格式消息等。

+0

它是否也適用於log4j屬性?並且根中的頁面就像默認包中的類一樣? – ehsun7b

+0

log4j.properties的默認位置在默認包中,但它們是簡單的屬性,而不是rersource包,因此不會通過相同的機制加載。關於JSP在根中的位置,我認爲它取決於所使用的服務器,它選擇如何生成相應的類。 –

+0

現在是否正確? ResourceBundle lbls = ResourceBundle.getBundle(「com.persiangulfcup.config.labels」); – ehsun7b