[英]Where to put composition components?(JSF 2.0)
我将继续使用 JSF 2.0 进行练习。 我认为模板是一件很棒的事情,它有很多优点。 但是今天我有一个与之相关的新疑问。
我为我的页面创建了一个模板。 在模板中,我使用标签对于不同的部分(这些部分稍后将在页面中使用组合标记结合一个或多个定义标记来实现)。
<ui:insert name="content" />
同样在模板内部,为了避免在模板中放入太多代码,我创建标签来添加一些其他的 xhtml 块。
<ui:include src="/languageChanger.xhtml"/>
这是我的文件夹结构的样子:
这一切都如我所料,但在 url 中,我导航到 languageChanger.xhtml,我看到了 xhtml 的复合块:
我的疑问是:
-那块独立的代码放在正确的地方了吗?或者是错误的,不应该让用户从URL中看到?
-那个地方是否保存有其他组件,如登录、注册......?
- 为了避免用户直接访问该组件,我可以将它放在 WEB-INF 文件夹中,但是我遇到了一个问题,即包含标签找不到路径。 我应该怎么办?
- 最佳实践是什么,将这些独立的代码块放在哪里?
那块独立代码是否放置在正确的位置?或者是错误的,不应该允许用户从 URL 中看到?
把它放在/WEB-INF
某个地方。 容器不允许直接访问此文件夹。
那个地方是否保存有其他组件,如登录、注册......?
我不明白你。 也许您的意思是说“安全”而不是“保存”? “其他组件”是什么意思?
为了避免用户直接访问该组件,我可以将它放在 WEB-INF 文件夹中,但是我遇到了一个问题,即包含标签找不到路径。 我应该怎么办?
你的路径显然是错误的。 Facelet 模板、包含、标签和组合(不是复合组件)可以完美地放置在/WEB-INF
中。
最佳实践是什么,将这些独立的代码块放在哪里?
把它放在/WEB-INF
中。 最佳做法是使用绝对路径,即以/
开头的路径。 它将相对于 webcontent 根进行解析。 例如
<ui:include src="/WEB-INF/languageChanger.xhtml" />
只有“主”页面(由 URL 请求的页面)不能放在/WEB-INF
中。
对于您的前两个问题:
那块独立代码是否放置在正确的位置?或者是错误的,不应该允许用户从 URL 中看到?
那个地方是否保存有其他组件,如登录、注册......?
他们使用的模板和默认内容都在正确的位置。 它们必须存在于 web 应用程序的文档根目录下,而不是其他地方。
对于你的最后两个问题:
为了避免用户直接访问该组件,我可以将它放在 WEB-INF 文件夹中,但是我遇到了一个问题,即包含标签找不到路径。 我应该怎么办?
最佳实践是什么,将这些独立的代码块放在哪里?
上面提供了部分答案,其中提到了将包含文件放在文档根目录下的需要。 JSF 运行时使用的“资源解析器”要求 facelet 存在于应用程序的文档根目录下。 由于这个原因,Facelets 不能放在WEB-INF
中。
如果您需要阻止用户直接访问这些页面,那么您必须编写一个 Web 应用程序过滤器来阻止对这些页面的访问。
Mojarra 运行时不会在内部将任何 HTTP 请求转发到模板资源; 相反,它包含文件的内容,检索为 stream。 这意味着您不需要将过滤器限制为单独调度REQUEST
类型; 您可以将过滤器应用于所有调度类型。
将所有模板和包含的 facelets 放在/templates
目录中可以更轻松地在单个 URL - /templates/*
上应用过滤器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.