我无法在互联网上找到使用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'?并且索引正在加载默认URL。我不明白!
其他猜测 - 这里有什么东西 - 每个页面一个ManagedBean,或者每个实体或者...... ??
我找不到任何好的示例或教程,这可以解释许多页面和许多网址结构的网址映射。如果有人可以解释Java EE项目中的映射机制,请在此处添加。任何映射图都可以通过与托管bean和app内部的jsp连接来识别: - )
答案 0 :(得分:1)
如果要更改默认页面(在localhost:8080/P1WSClient/
处看到),请更改web.xml中的欢迎文件选项
<welcome-file-list>
<welcome-file>customers.xhtml</welcome-file>
</welcome-file-list>
如果要访问某个目录下的页面,请在网页文件夹中创建文件夹。
localhost:8080/P1WSClient/something1/something2/mypage.html
-Web页面
--something1
---- something2
------- mypage.xhtml
答案 1 :(得分:1)
JSF请求转到JSF servlet,后者负责定位XHTML文件,处理它并执行“工作”。
有时,servlet会映射到以.xhtml
结尾的所有网址,有时只会映射到子目录中的.xhtml
网址。当然,只会处理映射的请求(如果已将servlet映射到/faces/*.xhtml
并且您收到/myFiles/index.xhtml
请求,则容器将返回index.xhtml
作为静态资源。如您所知,它可以是任何路径,faces
更常见。
我不确定如果URL没有指定一个文件,你是否可以“重定向到某个文件”。我会尝试Filter
。
对于托管bean,它取决于。通常我使用一个用于数据,一个用于每个页面的控制器(数据通常为@ViewScoped
,控制器大多数时间为@RequestScoped
),以及复合组件需要时的其他bean。