使我的webapplication能够使用存储在数据库中的JSF文件的最佳方法是什么?我希望能够动态地(在运行时)创建新的JSF页面,无需重新部署应用程序即可使用.换句话说:我想将我的JSF页面的大部分存储在数据库中,并希望JSF...
使我的webapplication能够使用存储在数据库中的JSF文件的最佳方法是什么?
我希望能够动态地(在运行时)创建新的JSF页面,无需重新部署应用程序即可使用.
换句话说:我想将我的JSF页面的大部分存储在数据库中,并希望JSF将数据库用作获取JSF文件的数据源.
我一直在想解决方案,并找到了一些可行的方法.但是,我无法实现其中任何一个.
>每当必须添加/删除新页面时:操纵类路径中的文件(例如,删除或添加文件到.war文件)
>扩展web应用程序的类路径,以便它能够从运行时定义的位置(即/ tmp或直接使用数据库连接)获取文件
>为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启动之前执行.过滤器是一个完美的地方.另见相关答案:
> How to create dynamic JSF form fields
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的文件.您可以在以下答案中找到完整的代码示例:
> how to share a jsf error page between multiple wars
> How to create a modular JSF 2.0 application?
3: Provide JSF with a way to find resources another way ( this doesn’t seem possible? )
您在自定义ResourceResolver中有足够的游戏空间.
本文标题为:java – 从数据库访问和使用.jsf文件
基础教程推荐
- JSP基于dom解析xml实例详解 2023-08-03
- MyBatis在注解上使用动态SQL方式(@select使用if) 2023-02-19
- 解决maven maven.compiler.source和maven.compiler.target的坑 2023-08-10
- 使用Java Service Wrapper将java程序作为linux服务并且开机自动启动 2023-09-01
- Java 嵌入数据引擎从 SQLite 到 SPL详解 2023-03-21
- Spring @Component自定义注解实现详解 2023-05-14
- 解决从Map、JSONObject取不存在键值对时的异常情况 2023-02-19
- Java正则表达式匹配字符串并提取中间值的方法实例 2023-01-13
- Quarkus中filter过滤器跨域cors问题解决方案 2022-10-24
- spring-boot-maven-plugin 配置有啥用 2023-04-12