【问题标题】:Java EE + JSF url mappingsJava EE + JSF url 映射
【发布时间】:2014-11-27 23:08:43
【问题描述】:

我在 Internet 上找不到任何关于使用 JSF + 托管 bean 在 Java EE 中映射 URL 的好的解释(是的 - 我知道,有一千万个教程,但是在使用 HelloWorld 页面查看了第一百万个之后,我放弃了阅读其余的......)。

在阅读 Java EE + JSF 之前,我正在使用 Spring + JSP 项目,其中 URL 映射是使用控制器中的注释 @GET/@POST 等进行的,以 url 作为属性 - 非常简单的解决方案,每个 URL 一个方法使用方法将资源放入响应页面。 (我不知道它是如何在后台制作的 - 我是初学者,但解决方案非常简单:))

现在我读了一本关于 Java EE 的书,在 web.xml 文件中有一些关于映射的内容,但是很不清楚。我觉得,还有其他想法——需要渲染的 JSF 页面连接到托管 bean 以获得所需的值。但是这里的映射是怎么做的呢?

它可能不干净,所以我会用我的示例来解释。

我的项目结构如下

我希望,页面 customerdetails.xhtml 和 customers.xhtml 可以分别使用 url localhost:8080/P1WSClient/customerdetails.xhtml 和 customers.xhtml 读取。

我已经完成了以下 web.xml 配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Customers servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Customers servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

好的,它正在工作。但是如何制作,例如,当我想让页面客户加载到默认位置 localhost:8080/P1WSClient/ 或客户端加载到位置 localhost:8080/P1WSClient/something1/something2/mypage.html 时?

其他提示 - 为什么开头的 url 模式是 ´/faces/*.jsp´ 和 ´/faces/index/hxtml´?并且索引正在默认网址上加载..我不明白!

其他提示 - 这里有什么 - 每页一个 ManagedBean,或每个实体或.. ??

我找不到任何好的示例或教程,可以解释许多页面和许多 url 结构的 url 映射。如果有人可以解释 Java EE 项目中的映射机制,请在此处添加。任何与托管 bean 和应用程序内的 jsp 连接的映射图也都受到欢迎:-)

【问题讨论】:

    标签: jsf jakarta-ee mapping


    【解决方案1】:

    如果您想更改默认页面(在localhost:8080/P1WSClient/ 看到),请更改 web.xml 中的欢迎文件选项

    <welcome-file-list>
        <welcome-file>customers.xhtml</welcome-file>
    </welcome-file-list>
    

    如果要访问某个目录下的页面,请在 web-pages 文件夹中创建文件夹。

    localhost:8080/P1WSClient/something1/something2/mypage.html
    

    -网页
    --something1
    ----something2
    --------mypage.xhtml

    【讨论】:

      【解决方案2】:

      JSF 请求转到 JSF servlet,它负责定位 XHTML 文件、处理它并完成“工作”。

      有时 servlet 映射到所有以 .xhtml 结尾的 URL,有时只映射到子目录中的 .xhtml URL。当然,只会处理映射的请求(如果您已将 servlet 映射到 /faces/*.xhtml 并且收到对 /myFiles/index.xhtml 的请求,则容器将返回 index.xhtml 作为静态资源。如您所知,它可以是任何路径,faces 更常见。

      我不确定如何获得“如果 URL 未指定,则重定向到某个文件”。我会尝试Filter

      对于托管 bean,这取决于。通常我使用一个用于数据,一个用于每个页面的控制器(数据通常为@ViewScoped,控制器大多数时候为@RequestScoped),并在复合组件需要时加上额外的bean。

      【讨论】:

      • >the controller of each page - 在 JSF 中,只有 Faces Servlet 是一个控制器;)您自己的每页 bean 通常称为支持 bean,并且在技术上始终是模型。
      猜你喜欢
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 2016-05-17
      • 1970-01-01
      • 2012-10-16
      • 2017-02-05
      相关资源
      最近更新 更多