当我在JSP中编写<h:outputText value="Login Name"/>
标记时,我收到以下异常消息:
Cannot find FacesContext
没有它,我的JSP工作正常。这是我的JSP:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<body>
Login Name <input type="text" value=""/><br>
<h:outputText value="Login Name"/>
Password<input type="password" value=""/><br>
<input type="submit" value="Login">
</body>
</html>
答案 0 :(得分:5)
您的代码存在两个缺陷:
此异常的根本原因是您忘记通过url-pattern
中定义的FacesServlet
的{{1}}传递请求。如果JSP页面例如名为web.xml
而page.jsp
的{{1}}例如是url-pattern
,那么您需要通过FacesServlet
而不是*.jsf
来调用它http://example.com/context/page.jsf
。这样,.jsp
将被调用并创建FacesServlet
。否则,页面中的JSF组件会抱怨无法找到FacesContext
,您将面临此特殊异常。
页面中缺少FacesContext
。将整个<f:view>
包裹在其中。 E.g。
<html>
顺便说一句, <%@ page pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<!doctype ... >
<f:view>
<html>
...
</html>
</f:view>
中的import
属性完全是多余的。摆脱它。