从 JSF 中的托管 bean 获取资源文件的路径

2024-01-25

我遇到这种情况:我试图在从托管 bean 中放置新的头像图像之前删除用户的旧头像图像。

String fileName = "resources/img/useravatars/" + getSessionBean().getSearchAccount().getAvatar();
File f = new File(fileName);

我用谷歌搜索了一下,似乎我可以从ExternalContext获取该文件夹的路径,例如:

FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.getExternalContext(). ...

但我找不到合适的方法类文档 http://download.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html#getRealPath%28java.lang.String%29。您能否帮忙解决该用什么来代替...或提出更好的解决方案。

附言。不知何故,我怀疑可以对链接进行硬编码,但到目前为止还没有运气。


我知道该文件嵌入在 WAR 中,并且您正在寻找ExternalContext#getRealPath() http://download.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html#getRealPath%28java.lang.String%29基于网络相对路径来解决它的方法。根据 Javadoc,该方法是在 JSF 2.0 中引入的,在 JSF 1.x 中不存在。您似乎正在使用 JSF 1.x,否则您不会问这个问题。你需要使用ServletContext#getRealPath() http://download.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getRealPath%28java.lang.String%29相反(这也是新的 JSF 2.0 方法在幕后委托的内容)。

String relativeWebPath = "/resources/img/useravatars/" + ...;
ServletContext servletContext = (ServletContext) externalContext.getContext();
String absoluteDiskPath = servletContext.getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath);
// ...

然而,有一个很大的BUT: 你可以但不应该write到扩大的战争。删除文件也是写入。每当您重新部署 WAR 或重新启动服务器时,每个更改都将被还原,并且扩展的 WAR 将保留其初始状态,从而丢失自上次部署以来在扩展的 WAR 中所做的所有更改。

您确实需要将这些文件存储在外部位置,然后可以对其根位置进行硬编码或在某些外部配置(属性)文件中定义。这样你就可以使用java.io.File按通常的方式填充。

有多种方法可以从外部位置提供文件。您可以在以下问题的答案中找到它们:使用 标签从 webapps/webcontext/deploy 文件夹外部加载图像

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 JSF 中的托管 bean 获取资源文件的路径 的相关文章

随机推荐

  • 后藤这个时候出乎意料了?

    我正在尝试制作一个连接四的小游戏 每当我按下 Enter 键而不在控制台中输入任何内容时 它都会说此时 goto 是意外的 如果没有用户输入 我希望它现在返回 X 任何帮助将不胜感激 X cls echo echo Connect Four
  • Wagtail 为 MyPage 设置附加权限

    这里是鹡鸰新手 我试图为特定模型添加一些额外的权限 但 wagtail admin 中没有显示任何内容 我可以用 django 方式做到这一点 但我的印象是 wagtail 可以处理这种类型的权限 我在 wagtail 文档中找不到任何提示
  • postgres 中的动态表分区

    例如 我正在寻找将 postgres 数据分区到基于时间戳的表中的方法 但无需手动添加相关子表 我看到这篇博文就是这样做的 https blog engineyard com 2013 scaling postgresql performa
  • 无法读取 null 的属性“样式”

    由于某种奇怪的原因 我收到了一个奇怪的错误 我有一个元素 用 PHP 定义 最终看起来像这样 span style display inline some html inputs and stuff span 我通过 Chrome 的 In
  • 使用 Protractor 访问 JS 范围元素/变量

    我有一个量角器测试 输入登录数据并单击登录按钮 我希望检查 Angular 变量的值 被单击元素的 ng click 是 doLogin 它在控制器文件中定义为 scope doLogin function console log logi
  • 在 MarkLogic 中处理禁运内容场景

    我有一个 MarkLogic 7 数据库 其中插入了多个文档 每个文档都有自己的created on and released on 举例来说 如果将文档插入到数据库中1400小时及其released on值为1700小时然后我需要将此文档
  • 无法单击打开文件附件对话框的按钮

    我在用着硒2 我正在尝试单击打开文件附件对话框的按钮 但是当我点击它时什么也没有发生
  • $q 承诺 - 对象不是函数

    我想运行承诺样本https docs angularjs org api ng service q https docs angularjs org api ng service 24q 这是我的代码 angular module test
  • 在所需文件夹中安装 python 包

    我已经下载了一个 python 包安装在我的 ubuntu 机器上 该包已经有一个 setup py 文件可供使用 但我想将默认的 python 安装地址更改为其他地址 专门用于该包 并且不是很好 所以我尝试的是 首先在终端中 我导出新文件
  • RabbitMQ 更改生产系统上的队列参数

    我在面向服务的架构中使用 RabbitMQ 作为消息队列 其中许多单独的 Web 服务发布绑定到 RabbitMQ 队列的消息 这些队列依次被不同的消费者订阅 这些消费者执行后台工作 RabbitMQ 的一个非常普通的用例 现在我想更改一些
  • 如何使用多个VAO和VBO在OpenGL中绘制多个对象?

    我正在尝试使用多个 VAO 和 VBO 在 OpenGL 中渲染多个对象 要使用相同的顶点渲染多个对象 我已经做到了 但我想做的是为每个对象使用不同的顶点 例如绘制一个正方形和一个圆形 对于正方形 我只需要 6 个顶点 但对于圆形 我需要
  • TeamCity 中的 MSBuild 步骤考虑 ASP.NET WEB API 项目的 app.config 而不是 web.config,导致警告 MSB3247

    我有带有 Web conig 文件的 ASP NET WEB API 项目 当它在 VS2015 中构建时 不会报告任何错误和警告 但是 当我使用 MSBuild 构建步骤在 TeamCity 上构建此项目时 我收到警告 MSB3247 R
  • 更改 SQLite3 中的值

    我将首先展示代码 create table products name text primary key price INTEGER insert into table products name price values coke 8 i
  • pom.xml(Maven 多模块项目)中的 在本地工作,但不在公司服务器上工作

    我在用着
  • 由于与 UserInterfaceState.xcuserstate 冲突而无法合并

    我创建了一个分支并做了很多更改 我提交了更改 然后存档了更改 然后我切换到master分支并尝试进行合并 它说我有未提交的更改 所以我在 master 分支上做了一次提交 看看它在说什么 它说有一个名为 UserInterfaceState
  • 扩展 Scala Enumeration.Val 时如何获得正确的值类型

    虽然 S O 上有很多关于 Scala 枚举困难的问题 但我还没有找到解决我的问题的问题 具体来说 我正在尝试将 Planet 示例从Oracle Java 枚举文档 http docs oracle com javase tutorial
  • Primefaces 菜单栏菜单项宽度

    我在使用菜单项时遇到问题 想要附上照片 但不允许所以如果没有它 问题就很愚蠢 我似乎无法更改下拉菜单的宽度 我已经在我的头脑中包含了一个样式 并在其中包含了一个宽度属性 每个菜单项 但它们没有区别 当菜单项突出显示时 选择栏的宽度是正确的
  • 尝试从 MySQL DB 添加视图时出现“命令执行期间遇到致命错误”

    我正在尝试将 MySQL 数据库中的一些表和视图添加到 VS2005 中的项目中 经过大量研究后 我最终使用了 ADO NET 连接器 它工作得很好 除了尝试使用数据源配置向导添加视图时 我收到 命令执行期间遇到致命错误 错误消息 并且当我
  • tableView.tableHeaderView 已设置但未绘制

    每当我设置 tableHeaderView 时 我都不会在模拟器中看到它 如果我将其添加为子视图 它最终会绘制在节标题下方 知道我在这里缺少什么吗 我有一个 XIB 文件 不过 我没有在 IB 中看到任何影响 headerView 的属性
  • 从 JSF 中的托管 bean 获取资源文件的路径

    我遇到这种情况 我试图在从托管 bean 中放置新的头像图像之前删除用户的旧头像图像 String fileName resources img useravatars getSessionBean getSearchAccount get