JSF页面呈现错误:面向上下文

时间:2009-11-24 18:09:59

标签: java jsf

当我的JSF页面被渲染时,我收到以下消息。页面正确呈现,但在控制台中,下面的消息会重复多次...

INFO: ERROR: Unable to get Faces Context for session variable: localeBean

11:54:27,090 INFO [STDOUT] 2009年11月24日上午11:54:27 com.web.util.faces.UtilFacesFuncs log 信息:很可能,您已从NON-Faces(即Servlet)上下文中请求了Faces对象。

在我的JSF中,我按照以下方式使用localebean:

<f:view locale="#{localeBean.userLocaleLoggedIn}">

在faces-config文件中,我将其定义如下:

<managed-bean>
    <description>Locale Bean</description>
    <managed-bean-name>localeBean</managed-bean-name>
    <managed-bean-class>com.mg.faces.LocaleBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

在我的类LocaleBean中有一个方法getUserLocaleLoggedIn(),它是在JSF页面执行时执行的代码:

  <f:view locale="#{localeBean.userLocaleLoggedIn}">

在调试我的jsp时,我可以看到正在调用的方法,并且每次都很好,我一直调试我的jsp,直到它创建页脚,就在它渲染到浏览器时,这些错误被重复抛出大约20多次。它只发生在tihs jsp上,因为它是我添加的一个新的。我尝试与现有的jso比较,我看不出有什么不同,有谁知道我不想要的东西?

任何帮助都非常感激。

感谢。

此致

2 个答案:

答案 0 :(得分:0)

此错误基本上意味着请求网址(您在浏览器地址栏中看到的网址,或用于包含/发送所需网页的网址)匹配{{在url-pattern中定义的FacesServlet映射的1}}。您需要让请求URL与其匹配才能调用web.xml

因此,如果它是例如以下后缀模式(扩展映射):

FacesServlet

然后您需要确保您的请求网址与之匹配,即使用http://example.com/context/page.jsf代替http://example.com/context/page.jsp

或者如果它是例如以下前缀模式(目录映射):

<url-pattern>*.jsf</url-pattern>

然后您需要确保您的请求网址看起来像http://example.com/context/faces/page.jsp而不是http://example.com/context/page.jsp

修改:虽然我不会为<url-pattern>/faces/*</url-pattern> 使用多个url-pattern而只是坚持一个,但映射看起来似乎很好。毕竟,错误消息来自FacesServlet。这看起来像一个本土的实用工具类。那课正在做什么?是不是只是该实用程序类中的一个错误,例如它试图在请求中过早或过晚访问com.web.util.faces.UtilFacesFuncs

答案 1 :(得分:0)

抱歉,我在上面添加的评论没有正确理解,这是我在web.xml中的内容: 我使用的网址也是http://localhost.com/context/register/mypage.htm 我在文件夹寄存器下有这些jsp。我可以从register文件夹中调用其他jsp 并且这个错误没有出现......就像我添加的这个特殊的jsp一样。

<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

我正在尝试添加我的完整映射但是代码标记在这里的工作方式,因为hte映射有标签而没有出现...我试过提供了blockquotes,但是这个编辑器仍然无法正确显示我的映射道歉!

知道我应该如何调用我的网址。感谢。