0

我尝试制作简单的 JSF 示例并有几个文件管理器。我使用 Maven,并已存储在 META-INF flolder faces-confid.xml 中。

在尝试执行时的输出中我看到:

Welcome to JSF. #{test.test}

但我认为它一定是别的东西。

他们来了:

豆文件

import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;


@Named("test")
@RequestScoped
public class TestBean implements Serializable{
    private String test = "test";

    public String getTest() {
        return test;
    }

    public void setTest(String test) {
        this.test = test;
    }    
}

XHTML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Welcome</title>
    </h:head>
    <h:body>
        <h3>Welcome to JSF. #{test.test}</h3>
    </h:body>
</html>

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"
   version="2.5">
   <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>/faces/*</url-pattern>
   </servlet-mapping>
   <welcome-file-list>
      <welcome-file>new.xhtml</welcome-file>
   </welcome-file-list>
   <context-param>
      <param-name>javax.faces.PROJECT_STAGE</param-name>
      <param-value>Development</param-value>
   </context-param>
</web-app>
4

2 回答 2

4

如果 JSF 没有找到 bean,您就不会看到#{test.test},而只是一个空字符串来代替那个 EL 表达式。EL 表达式没有被评估有一个不同的原因:当前的 HTTP 请求根本没有调用FacesServlet,因此它无法为您执行所有 JSF 工作。为了调用它,您需要确保您在浏览器地址栏中看到的请求 URL 与定义的 URL 模式FacesServlet匹配web.xml

另一个证据可以通过右键单击查看 webbrowser 中的 HTML 源代码View Source找到。你会注意到所有这些<h:xxx>标签都没有被解析。这FacesServlet也是负责这项工作的人。

假设您的 web 应用程序在其上运行http://example.com/context/并且您有一个 Facelet 文件/page.xhtml,那么根据 URL 模式有以下场景FacesServlet

  • 如果是*.jsf,那么您需要通过以下方式打开http://example.com/context/page.jsf
  • 如果是*.faces,那么您需要通过以下方式打开http://example.com/context/page.faces
  • 如果是/faces/*,那么您需要通过以下方式打开http://example.com/context/faces/page.xhtml

另一种方法是将其映射到*.xhtml. 这样您就无需担心虚拟 URL。

也可以看看:

于 2013-01-25T16:00:23.493 回答
0

您需要将 faces-config.xml 和 web.xml 存储在 WEB-INF 文件夹中。xhtml 文件应该在 WebContent 中。

于 2013-01-25T16:01:17.893 回答