问题描述
我有一个包含JSF组件index.jsp
的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>
当我按下登录"按钮时,出现此错误:
这是怎么引起的,我该如何解决?
此操作导航到的JSP文件中缺少<f:view>
标记.如果要使用旧版JSP作为视图技术而不是其后继Facelets,则需要确保所有JSF组件都包含在父<f:view>
标记内(该标记位于UIViewRoot
组件所代表的场景之后). /p>
您需要更改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>
I have a JSP file with JSF components 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>
When I press the "Login" button, I get this error:
How is this caused and how can I solve it?
The <f:view>
tag is missing in the JSP file where this action is navigating to. If you're using legacy JSP as view technology instead of its successor Facelets, then you need to make sure that all JSF components are enclosed inside a parent <f:view>
tag (which is behind the scenes represented by UIViewRoot
component).
You need to change your JSP file to match the following basic template (note the <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>
这篇关于java.lang.IllegalStateException:组件javax.faces.component.UIViewRoot不是预期的类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!