gpt4 book ai didi

java - 从数据库访问和使用 .jsf 文件

转载 作者:搜寻专家 更新时间:2023-11-01 03:28:46 24 4
gpt4 key购买 nike

使我的 Web 应用程序能够使用存储在数据库中的 JSF 文件的最佳方法是什么?我希望能够动态地(在运行时)创建新的 JSF 页面,无需重新部署应用程序即可使用这些页面。

换句话说:我想将我的 JSF 页面的大部分存储在数据库中,并希望 JSF 使用数据库作为获取 JSF 文件的数据源。

我考虑了很长时间的解决方案并找到了一些可能的方法。但是,我无法实现它们中的任何一个。

  1. 每当必须添加/删除新页面时:操作类路径中的文件(例如删除文件或将文件添加到 .war 文件)
  2. 扩展 web 应用程序的类路径,以便它能够从运行时定义的位置(即/tmp 或直接使用数据库连接)获取文件
  3. 为 JSF 提供一种以另一种方式查找资源的方法(这似乎不可能?)

我的环境:

  • Java SE 6
  • Jetty 作为 servlet 容器
  • Mojarra 作为 jsf 实现

现在,我的问题:

是否有人可以让 JSF 在默认类路径以外的位置(最好是数据库)查找页面?

非常感谢任何回复!

最佳答案

1: Whenever a new page has to be added/removed: manipulate the files in the classpath (e.g. remove or add a file to the .war file)

如果扩大WAR的话,这肯定是可以的。我不确定 Jetty,但它适用于 Tomcat 7 和 Glassfish 3 上的 Mojarra 2.x。只需将文件写入扩展的 WAR 文件夹,通常的 Java IO 方式就足够了。

File file = new File(servletContext.getRealPath("/foo.xhtml"));

if (!file.exists()) {
OutputStream output = new FileOutputStream(file);

try {
output.write(bytes); // Can be bytes from DB.
} finally {
output.close();
}
}

这需要在 FacesServlet 启动之前 执行。Filter 是一个完美的地方。另请参阅此相关答案:


2: Extending the classpath of the webapplication so it will be able to get files from an at runtime defined location (i.e. /tmp or directly using a database connection)

您可以将 Facelets 文件打包到 JAR 文件中并将其放入类路径中,并提供一个 Facelets ResourceResolver当在 WAR 中找不到匹配项时,它会提供 JAR 中的文件。您可以在以下答案中找到完整的代码示例:


3: Provide JSF with a way to find resources another way ( this doesn't seem possible? )

您在自定义 ResourceResolver 中有足够的发挥空间。

关于java - 从数据库访问和使用 .jsf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6202217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com