JSF RuntimeException:找不到FacesContext

Sur*_*nti 0 java jsf jsp

当我<h:outputText value="Login Name"/>在JSP中编写标记时,我收到以下异常消息:

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>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 5

您的代码有两个缺陷:

  1. 此异常的根本原因是,你忘了通过将请求传递url-patternFacesServlet作为definied web.xml.如果JSP页面,例如命名page.jspurl-patternFacesServlet是,例如*.jsf,那么你需要调用它http://example.com/context/page.jsf来代替.jsp.这样FacesServlet将调用并创建FacesContext.否则页面中的JSF组件会抱怨FacesContext无法找到,并且您将面临此特定异常.

  2. <f:view>丢失的页面.将整个包裹<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>
    
    Run Code Online (Sandbox Code Playgroud)

顺便说一句,那个import属性<%@page>是完全多余的.摆脱它.