哪里放组成组件?(JSF 2.0)

我正在继续我的JSF 2.0实践。 我认为模板是一件好事,它有很多优点。 但是今天我得到了一个与之相关的新疑问。

我为我的网页创建了一个模板。 在模板中,我使用标签 对于不同的部分(这些部分稍后将在一个页面中使用组合标记结合一个或多个定义标记来实现)。

 

同样在模板内部,为了避免在模板中添加太多代码,我创建 标签添加一些其他的xhtml块。

  

这是我的文件夹结构的样子:

在此处输入图像描述

这一切都像我一样工作,但当我在url导航到languageChanger.xhtml时,我看到了xhtml的复合块:

在此处输入图像描述

我的怀疑是:

– 那些大量独立代码放在正确的位置?,或者它是错误的,不应该允许用户从URL中看到它?

– 那个地方保存有其他组件,如登录,注册……?

– 为了避免用户直接访问组件,我可以将它放在WEB-INF文件夹中,但是我有一个问题,包含标签找不到路径。 我该怎么办?

– 什么是最佳实践,在哪里放置这些独立的代码块?

这块独立代码是否放在正确的位置?或者它是错误的,不应该允许用户从URL中看到它?

把它放在/WEB-INF 。 容器不允许直接访问此文件夹。


这个地方是否保存其他组件,如登录,注册……?

我不明白你。 也许你想说“安全”而不是“保存”? 你对“其他组件”的意思是什么?


为了避免用户直接访问组件,我可以将它放在WEB-INF文件夹中,但是我有一个问题,包含标签找不到路径。 我该怎么办?

你的道路显然是完全错误的。 Facelet模板,包含,标签和组合(非复合组件)可以完美地放在/WEB-INF


什么是最佳实践,在哪里放置这些独立的代码块?

把它放在/WEB-INF 。 最佳做法是使用绝对路径,即用/启动路径。 它将相对于webcontent根进行解析。 例如

  

只有“主”页面(URL请求的页面)不能放在/WEB-INF

对于前两个问题:

  • 这块独立代码是否放在正确的位置?或者它是错误的,不应该允许用户从URL中看到它?

  • 这个地方是否保存其他组件,如登录,注册……?

模板和它们使用的默认内容位于正确的位置。 它们必须位于Web应用程序的文档根目录下,而不是其他位置。

对于你的最后两个问题:

  • 为了避免用户直接访问组件,我可以将它放在WEB-INF文件夹中,但是我有一个问题,包含标签找不到路径。 我该怎么办?

  • 什么是最佳实践,在哪里放置这些独立的代码块?

上面提供了部分答案,其中提到了在文档根目录下放置包含文件的需要。 JSF运行时使用的“资源解析器”要求facelet存在于应用程序的文档根目录下。 由于这个原因,Facelets不能放在WEB-INF中。

如果您需要阻止用户直接访问这些页面,则必须编写Web应用程序筛选器以防止访问这些页面。

Mojarra运行时不会在内部将任何HTTP请求转发到模板资源; 相反,它包括文件的内容,作为流检索。 这意味着您不必将filter限制为单独调度REQUEST类型; 您可以将filter应用于所有调度类型。

将所有模板和包含的facelets放在/templates目录中可以更轻松地将filter应用于单个URL – /templates/*