JSF 2.0加载捆绑包

时间:2010-10-05 14:14:35

标签: internationalization jsf-2 bundle

我收到以下错误:

> org.apache.jasper.JasperException: An
> exception occurred processing JSP page
> /ajax/busstop_ajax.jsp at line 12
    10: <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
    11: <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
    12: <f:loadBundle basename="/../messages.Messages" var="msg" />
    13: 
    14: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    15:    "http://www.w3.org/TR/html4/loose.dtd">


    Stacktrace:
        org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

    root cause

    java.lang.NullPointerException
        com.sun.faces.taglib.jsf_core.LoadBundleTag.doStartTag(LoadBundleTag.java:148)
        org.apache.jsp.ajax.busstop_005fajax_jsp._jspx_meth_f_005floadBundle_005f0(busstop_005fajax_jsp.java:184)
        org.apache.jsp.ajax.busstop_005fajax_jsp._jspService(busstop_005fajax_jsp.java:68)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

我正在尝试添加一个包以便能够翻译界面。整个页面是用jsp而不是html。

<%@page import="java.util.List"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<f:loadBundle basename="messages.Messages" var="msg" />

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>JSP Page</title>
        </head>
        <body>
           ...
        </body>
    </html>
</f:view>

我也尝试在faces-config中添加它,但没有成功。我在这做错了什么? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

<f:loadBundle>不存在时,FacesContext会抛出NPE。

换句话说,您没有通过url-pattern FacesServlet web.xml中的FacesServlet来调用请求。 FacesContext即负责创建url-pattern的人。如果*.jsf例如pagename.jsf,您应该在pagename.jsp之前打开网页浏览器中的页面,而不是f:loadBundle

顺便说一句,堆栈跟踪也证明它根本没有被JSF处理过。在调用{{1}}之前,没有单行表示JSF API或impl的参与。


那说(并且与当前问题无关),考虑到你正在使用JSF 2.0(至少,你这样标记)并且Facelets是JSP的优越继承者 - 在JSF-的情况下,我强烈建议完全删除JSP并改为使用Facelets。