我有一个包含JSF组件的JSP文件index.jsp:
index.jsp
<body> <h:form prependId="false"> <h:panelGrid id="panelLogin" columnClasses="colLabel,colValor" columns="2"> <f:facet name="header"> <h:outputText value="Panel de Log-In" /> </f:facet> <h:outputLabel value="Usuario" for="txtNombre" /> <h:inputText id="txtNombre" value="#{manejadorLogin.usuario}" /> <h:outputLabel value="Password" for="txtPassword" /> <h:inputText id="txtPassword" value="#{manejadorLogin.password}" /> <f:facet name="footer"> <h:panelGrid columns="2"> <h:commandButton value="Login" action="#{manejadorLogin.loginUsuario}" /> <h:commandButton value="Limpiar" type="reset" /> </h:panelGrid> </f:facet> </h:panelGrid> </h:form> </body>
当我按下“登录”按钮时,出现此错误:
发生错误:java.lang.IllegalStateException:组件javax.faces.component.UIViewRoot@7cf94d3b不是预期的类型。预期:javax.faces.component.UIOutput。也许您缺少标签?
这是怎么引起的,我该如何解决?
该<f:view>操作导航到的JSP文件中缺少该标记。如果您使用遗留的JSP作为视图技术而不是其后继的Facelets,则需要确保所有JSF组件都包含在父<f:view>标记内(该父标记位于由UIViewRoot组件表示的幕后)。
<f:view>
UIViewRoot
您需要更改JSP文件以匹配以下基本模板(请注意<f:view>):
<%@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"%> <!DOCTYPE html> <f:view> <html lang="en"> <head> <title>JSP page with JSF components</title> </head> <body> <h:outputText value="JSF components here." /> </body> </html> </f:view>