JSF 标记 <h:inputText> 不工作

JSF tag <h:inputText> not working

我是 JSF 的新手,遇到了一个问题。我开发了一个包含标签 <h:inputText> 的小应用程序。当我执行应用程序时,它不显示文本输入部分。 下面是代码:

User.java: (托管 Bean)

package com.JSF.UIExample;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "user", eager = true)
@RequestScoped
public class User {
    private String name;
    private String password;
    private String email;
    private String gender;
    private String address;

    public User(){  }
    // getter and setter
}

Detail.xhtml: (创建用户注册详情)

<!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://xmlns.jcp.org/jsf/html" 
xmlns:f="http://xmlns.jcp.org/jsf/core">

<h:head>
    <title>User Registration</title>
</h:head>

<h:body>
    <h:form id="form">
        <table>
            <tr>
                <td><h:outputLabel for="username"><b>Username:</b></h:outputLabel></td>
                <td><h:inputText id="name-id" value="#{user.name}" /></td>
            </tr>
            <tr>
                <td><h:outputLabel for="password"><b>Password:</b></h:outputLabel></td>
                <td><h:inputSecret id="password-id" value="#{user.password}" /></td>
            </tr>
            <tr>
                <td><h:outputLabel for="email">Email:</h:outputLabel></td>
                <td><h:inputText id="email-id" value="#{user.email}" /></td>
            </tr>
            <tr>
                <td><h:outputLabel for="gender">Gender:</h:outputLabel></td>
                <td><h:selectOneRadio value="#{user.gender}">
                        <f:selectItem itemValue="Male" itemLabel="Male" />
                        <f:selectItem itemValue="Female" itemLabel="Female" />
                    </h:selectOneRadio></td>
            </tr>
            <tr>
                <td><h:outputLabel for="address">Address:</h:outputLabel></td>
                <td><h:inputText id="address-id" value="#{user.address}" cols = "50" rows = "5" /></td>
            </tr>
        </table>
        <h:commandButton value = "Submit" action = "Response.xhtml"></h:commandButton>
    </h:form>
</h:body>
</html>

Response.xhtml:

<!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://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core">

<h:head>
    <title>User Details</title>
</h:head>

<h:body>
    <h2>
        <h:outputText value="Hello #{user.name}" />
    </h2>
    <h4>You have been registered successfully. Following are your
        details</h4>
    <table>
        <tr>
        <td><b>Email:</b></td>
        <td><h:outputText value = "#{user.email}"/></td>
        </tr>
        <tr>
        <td><b>Gender:</b></td>
        <td><h:outputText value = "#{user.gender}"/></td>
        </tr>
        <tr>
        <td><b>Address:</b></td>
        <td><h:outputText value = "#{user.address}"/></td>
        </tr>
    </table>
</h:body>

web.xml:

<?xml version = "1.0" encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee" 
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   id = "WebApp_ID" version="2.5">

   <welcome-file-list>
      <welcome-file>faces/Detail.xhtml</welcome-file>
   </welcome-file-list>

   <!-- 
      FacesServlet is main servlet responsible to handle all request. 
      It acts as central controller.
      This servlet initializes the JSF components before the JSP is displayed.
   -->

   <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>

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

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

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

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

</web-app>

Maven 依赖:

        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.1.7</version>
        </dependency>

        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.1.7</version>
        </dependency>

xmlns:h="http://xmlns.jcp.org/jsf/html" 的两个 xhtml 文件中显示警告 Can't find facelet tag library for uri http://xmlns.jcp.org/jsf/html & xmlns:f="http://xmlns.jcp.org/jsf/core" 显示警告 Can't find facelet tag library for uri http://xmlns.jcp.org/ 谁能告诉我哪里错了。

对于 2.2 之前的 JSF 版本,您需要使用旧的 com.sun 命名空间。

Old namespace | JSF 2.2 namespace

http://java.sun.com/jsf/core | http://xmlns.jcp.org/jsf/core

http://java.sun.com/jsf/html | http://xmlns.jcp.org/jsf/html

http://java.sun.com/jsf/facelets | http://xmlns.jcp.org/jsf/facelets

http://java.sun.com/jsf/composite | http://xmlns.jcp.org/jsf/composite

http://java.sun.com/jsp/jstl/core | http://xmlns.jcp.org/jsp/jstl/core

http://java.sun.com/jsp/jstl/functions | http://xmlns.jcp.org/jsp/jstl/functions

另请参阅: