当我的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比较,我看不出有什么不同,有谁知道我不想要的东西?
任何帮助都非常感激。
感谢。
此致
答案 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,但是这个编辑器仍然无法正确显示我的映射道歉!
知道我应该如何调用我的网址。感谢。