Java 在执行xhtml时获取非法状态异常

Java 在执行xhtml时获取非法状态异常,java,jsf-2,xhtml,Java,Jsf 2,Xhtml,我在做jsf应用程序时遇到了一些异常。这是我的xhtml代码 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml

我在做jsf应用程序时遇到了一些异常。这是我的xhtml代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"   
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core">

        <f:view> 
            <h:head><title>Index</title></h:head>
                <body>
                <h:form>
                    <h:outputText value="#{login.userName}"></h:outputText><br/>
                    <h:inputText id="userId" value="#{emp.userId}"></h:inputText>
                    <h:commandButton action="#{emp.check}" value="check"/>
                </h:form>
            </body>
        </f:view>   
 </html>
尝试使用此代码

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"   
           xmlns:h="http://java.sun.com/jsf/html"
           xmlns:f="http://java.sun.com/jsf/core"
           xmlns:ui="http://java.sun.com/jsf/facelets">

    <f:view> 
        <h:head><title>Index</title></h:head>
            <body>
            <h:form>
                <h:outputText value="#{login.userName}"></h:outputText><br/>
                <h:inputText id="userId" value="#{emp.userId}"></h:inputText>
                <h:commandButton action="#{emp.check}" value="check"/>
            </h:form>
        </body>
    </f:view>   
</ui:composition>

指数


更新您的代码并将
放入
中,如下所示:

<f:view>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

        <html xmlns="http://www.w3.org/1999/xhtml"   
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core">

           //facelet code..

         </html>
</f:view> 

//facelet代码。。

您是否检查了
用户名
值,因为根据堆栈跟踪其返回的
null
。你能发布
login
bean代码吗!我正在从会话中获取用户名值。当我运行上面的xhtml时,它会显示出来。但是,在文本字段中输入id并提交之后,我得到了org.apache.jasper.jaspereException:javax.servlet.ServletException:javax.servlet.jsp.jspeException:java.lang.IllegalStateException:Component javax.faces.Component。UIViewRoot@1b70f9e不是预期的类型。应为:javax.faces.component.UIOutput。也许您缺少了一个标记?您的Facelets(XHTML)文件以某种方式被解释为JSP文件。这表明JSF配置严重混乱。显示您的
web.xml
,并在
/web-INF/lib
中列出JAR,以便我们可以指出原因。khan目前接受的答案不可能是“正确”的答案,请不要为了接受答案而随机接受答案。这是无效的HTML。请用文字解释答案。您在第一次使用后声明了
。这样,
就变成了一个未知的标记。
<f:view>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

        <html xmlns="http://www.w3.org/1999/xhtml"   
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core">

           //facelet code..

         </html>
</f:view>