【问题标题】:JSF form not shown未显示 JSF 表单
【发布时间】:2013-06-08 12:54:14
【问题描述】:

我想使用 jsf 实现我想要的登录页面 实现一个表单:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.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" xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <title>Login</title>
    <link href="../resources/css/basic.css" type="text/css" rel="stylesheet" />
</h:head>
<h:body>
<div id="wrapper">
    <ul id="menu">
        <li id="menutab"><a class="link" href="../index.jsp">Home</a></li>
        <li id="menutab"><a class="link" href="../jsf/list.jspx">Liste</a></li>
        <li id="menutab"><a class="link" href="../servlets/DataServlet">Daten</a></li>
        <li id="menutab"><a class="link" href="../servlets/ListMoviesServlet">Movies</a></li>
        <li id="menutab"><a class="link" href="../servlets/ListPeopleServlet">People</a></li>
    </ul>
    <br></br>
    <h2 id="title">Login</h2>

    <h:form id="j_security_check">
        <center>
            <h:messages errorClass="errorMessage" infoClass="infoMessage" warnClass="warnMessage"></h:messages>
            <h:panelGrid columns="2">
                <h:outputText value="Username : "/>
                <h:inputText id="j_username" value="#{loginBean.username}"/>

                <h:outputText value="Password : "/>
                <h:inputSecret id="j_password" value="#{loginBean.password}"/>

                <h:commandButton value="Submit" action="#{loginBean.login}" type="submit"/>
            </h:panelGrid>
        </center>
    </h:form>
</div>
</h:body>
</html>

页面已显示,但此处定义的表单未显示。一切 标题后只是一个白屏。 为什么表单没有呈现?

【问题讨论】:

  • 查看结果源时是否看到 JSF 代码?
  • 您的 web.xml 是否设置为正确使用面孔?
  • center-tag 在 HTML 4 中已弃用,在 HTML 5 中不受支持,可能会导致意外行为,请使用 css 使内容居中。
  • 当我在浏览器中查看源代码时,我得到了 jsf 代码。是的。 web.xml 中的配置必须没问题,因为我有另一个 jsf 页面正确呈现。在这个 jsf 中,我将 html 代码视为源代码

标签: jsf jsf-2


【解决方案1】:

好的,我明白了!

这是我的 web.xml 中的 jsf 映射:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jspx</url-pattern>
</servlet-mapping>

如您所见,url 模式描述了“.jspx”

所以我必须用“myjsf.jspx”而不是“myjsf.xhtml”来调用我的jsf

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>loginRealm</realm-name>
    <form-login-config>
        <form-login-page>/jsf/login.jspx</form-login-page>
        <form-error-page>/jsf/error.jspx</form-error-page>
    </form-login-config>
</login-config>

【讨论】:

  • 或者更好的是,将您的模式更改为*.xhtml
  • 并去掉默认的后缀条目。这仅适用于 JSF 1.x / Facelets 1.x。鉴于您对该条目的混淆以及 JSPX 扩展的使用,我的印象是您在学习 JSF2 时阅读了错误的资源。您应该阅读 JSF2 资源,而不是 JSF1 资源。 JSF2 中的许多事情都以不同的方式完成,以至于您在检查 JSF1 资源时也只会陷入混乱、学习困难和灾难。
猜你喜欢
  • 2011-03-01
  • 1970-01-01
  • 2018-09-28
  • 2014-07-30
  • 1970-01-01
  • 2016-11-17
  • 2020-01-23
  • 1970-01-01
相关资源
最近更新 更多