获取返回 StreamedContent 的 的具体 URL

2023-11-22

为了使用灯箱,我需要一个指向由以下命令生成的图像的链接<p:graphicImage>.

最终,HTML 应该如下所示:

<a href="image.jpg" data-lightbox="bilder">
  <img src="image.jpg" />
</a>

这是我到目前为止的 JSF 尝试:

<h:outputLink data-lightbox="bilder" value="???">
  <p:graphicImage value="#{imageStreamer.image}">
    <f:param name="imageId" value="#{gameReader.game.cover.id}"/>
  </p:graphicImage>
</h:outputLink>

如何获取具体的URL<p:graphicImage>返回StreamedContent这样我就可以在我的链接中使用它?


这有一个解决方案 - 这里使用 servlet 是一个可以在任何 jsf 应用程序中工作的 servlet

package com.dossier.web.handlers;

//~--- non-JDK imports --------------------------------------------------------



import com.dossier.backend.services.mongo.FileService;
import com.mongodb.gridfs.GridFSDBFile;

//~--- JDK imports ------------------------------------------------------------

import java.io.*;

import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
import javax.servlet.SingleThreadModel;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;

/**
 *
 * @author Armen Arzumanyan
 */
@WebServlet(urlPatterns = { "/PreviewImage" })
public class PreviewImage extends HttpServlet implements SingleThreadModel {
    private static final long serialVersionUID = -6624464650990859671L;
    private FileService       fileAction       = new FileService();

    @Override
    public void init() throws ServletException {
        super.init();
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPreviewImage(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {}

    private void doPreviewImage(HttpServletRequest request, HttpServletResponse response) throws IOException {
        FacesContext context   = FacesContext.getCurrentInstance();
        String       fileIdStr = request.getParameter("fileId");
        String       widthStr  = request.getParameter("w");
        GridFSDBFile file      = null;
        int          width     = 0;

        if ((widthStr != null) && (widthStr.length() > 0)) {
            try {
                width = Integer.parseInt(widthStr);
            } catch (NumberFormatException e) {}
        }

        if (fileIdStr != null) {
            if (fileAction != null) {
                file = fileAction.getFile(fileIdStr.trim());
            }

            if (file != null) {
                byte[] content = IOUtils.toByteArray(file.getInputStream());

                if (content != null) {
                    String mimeType = file.getContentType();

                    response.addHeader("Pragma", "cache");
                    response.addHeader("Cache-Control", "max-age=3600, must-revalidate");
                    response.addDateHeader("Expires", System.currentTimeMillis() + 1000 * 3600 * 10);
                    response.setContentType(mimeType);

                    try {
                        if (((mimeType != null)
                                && (mimeType.equalsIgnoreCase("image/gif") || mimeType.equalsIgnoreCase("image/x-png")
                                    || mimeType.equalsIgnoreCase("image/png") || mimeType.equalsIgnoreCase("image/jpg")
                                    || mimeType.equalsIgnoreCase("image/jpeg"))) || (width == 0)) {
                            response.getOutputStream().write(content);
                        } else {

//                          ByteArrayInputStream bi = new ByteArrayInputStream(content);
//                          InputStream thumbStream = scaleImageJPG(bi, width);
//                          byte[] thumbContent = new byte[thumbStream.available()];
//                          thumbStream.read(thumbContent);
                            response.getOutputStream().write(content);
                        }
                    } catch (IOException e) {

                        // log.error("file content send error");
                        e.printStackTrace();
                    } catch (Exception e) {

                        // log.error("file exception: " + e);
                        e.printStackTrace();
                    } finally {
                        content = null;
                        file    = null;
                    }

                    return;
                }
            } else {

                // TODO add page not found
                response.addHeader("Pragma", "no-cache");
                response.addDateHeader("Expires", System.currentTimeMillis() - 1000 * 3600);

                try {
                    response.getWriter().println("file object is null");
                } catch (Exception e) {}

                return;
            }
        }

        // TODO add page not found
        response.addHeader("Pragma", "no-cache");
        response.addDateHeader("Expires", System.currentTimeMillis() - 1000 * 3600);

        try {
            response.getWriter().println("file id is not set");
        } catch (Exception e) {}

        // log.debug("file ID parameter is not set or file is not found");
        return;
    }

    // </editor-fold>
}


//~ Formatted by Jindent --- http://www.jindent.com

这是一个网页代码

<h:graphicImage id="primage" styleClass="img-rounded img-responsive"
                                                                url="/PreviewImage?w=250&amp;fileId=#{updatePersonBean.person.imageId}"
                                                                width="250" rendered="#{updatePersonBean.person.imageId != null}"/>                                              
                                                <h:graphicImage id="primagenew" styleClass="img-rounded img-responsive"
                                                                url="/resources/img/userpic_simple.gif"
                                                                width="250" rendered="#{updatePersonBean.person.imageId == null}"/>

Enjoy

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

获取返回 StreamedContent 的 的具体 URL 的相关文章

  • 合并 url 中的 2 个输入值

    我有这样的形式
  • 如何在 Dart 中以正确的方式重定向和重新加载?

    在 Dart 中进行重定向和重新加载的首选方法是什么 我们是否只使用 window location href window location href 有几种不同的方法可以处理 URI 更改 每种方法都有自己的用途 当您想要将用户发送到另
  • 为什么 java.net.URLEncoder 对于相同的字符串给出不同的结果?

    当我尝试编码时在 webapp 服务器上 me dicaux Je ro me txt using java net URLEncoder它给出以下字符串 me CC 81dicaux Je CC 81ro CC 82me txt 在我的后
  • 如何在 中使用

    我想包括
  • JSF 不呈现自定义 HTML 标记属性

    我想向我的登录表单添加一些 iOS 特定的标签属性 如果我查看我的网页源代码 就会发现自动更正 自动大写和拼写检查属性不存在 这是什么原因呢 我正在使用 JSF 2 x
  • 为什么有些网站会在 URL 末尾添加“Slugs”? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 许多网站 包括这个网站 都添加了明显称为slugs 描述性的 但据我所知 无用的文本片段 到 URL 的末尾 例如 该网站针对此问题给出的 URL 是
  • 将 url 重定向到带有尾随点的主页

    Google 网站管理员显示一些重复的网址 他们是 www abc com index php option com toys view detail n id 148 ite www abc com index php option co
  • 来自 jsp:include 的 JSF 1.2 自定义组件

    在开始回答我的问题之前 我先说一下我的不幸的局限性 我使用的是 JSF 1 2 而不是 2 所以没有复合组件 我使用 JSP 代替 Facelets 进行渲染 所以这些复合组件也没有 我不允许使用任何第三方标签库 richFaces ice
  • PHP - 将文件系统路径转换为 ​​URL

    我经常发现项目中的文件需要从文件系统和用户浏览器访问 一个例子是上传照片 我需要访问文件系统上的文件 以便可以使用 GD 来更改图像或移动它们 但我的用户还需要能够从类似以下的 URL 访问文件example com uploads myp
  • 电话呼叫的 URL 方案

    就像 mailto URL 前缀启动用户的默认邮件程序并使用指定地址启动新电子邮件一样 是否有类似的 URL 方案可以发起电话呼叫 也许是 电话 呼叫 或 啜饮 顺便说一句 我的目标是使用 Cisco CUPS 的平台 因此可能有一种特定于
  • 使用条件渲染时,未在请求作用域 bean 中处理输入值

    我知道此类问题已在这里被问过数百万次 但我在相关帖子中找不到我的问题的解决方案 JSF 1 2 我有一个请求范围的 bean 其方法用作 valueChangeListener class DoStuff public void step1
  • JSF 错误 - IllegalStateException:PWC3999:提交响应后无法创建会话[重复]

    这个问题在这里已经有答案了 我是 JSF 新手 正在构建一个使用 Facelet 创建的应用程序 这是我的模板master xhtml
  • 当用户使用相同的凭据登录两次时如何使用户会话无效

    我正在使用带有 Richfaces 和 Facelets 的 JSF 1 2 我有一个应用程序 其中包含许多会话范围的 Bean 和一些应用程序 Bean 假设用户使用 Firefox 登录 创建一个会话 ID A 然后他打开 Chrome
  • JSF - 实施受限页面过滤器

    我正在关注 BalusC 的回答JSF 2 0 如何获取在浏览器地址栏中输入的 URL https stackoverflow com questions 4105263 jsf 2 0 how to get the url that is
  • 丰富:数据表行跨度问题

    我需要创建一个 rich dataTable 甚至扩展 具有以下功能 我有一个公司类 其中包含产品对象的集合 我想展示下表 我仍然没有弄清楚如何使用子表执行此操作 在所有示例中 我发现子表具有与主表完全相同的列 据推测 我需要在前两列中使用
  • Bash 的源命令无法处理从互联网上卷曲的文件

    我正在尝试使用curl从互联网获取脚本文件 如下所示 source lt curl url echo done 我看到的是 完成 得到了回响before卷曲甚至开始下载文件 这是实际的命令和输出 bash 3 2 source lt cur
  • JSF 2.x @EJB 依赖注入错误

    因此 正如编程中通常发生的那样 我提出了一个问题 而一个潜在的解决方案又引发了更多问题 和错误 我刚开始使用 servlet JSF 和 EJB 并且遇到了依赖注入错误 这是我原来的问题 JSF h 标签不显示 https stackove
  • 设置开始日期后设置 primefaces 日历结束日期

    我正在使用 primefaces 日历来创建事件 使用 mindate 参数 我禁用了当天之前的日子 即使有结束日期 我也想这样做 禁用开始日期之前的日子 我不知道如何处理这个问题 因为支持 bean 仅在验证整个表单后才获取开始日期 我需
  • 如何在单页应用程序中使用 #-URL?

    本文 http danwebb net 2011 5 28 it is about the hashbangs提出了一个非常令人信服的论点 因为 URL 是长期存在的 它们被添加书签并传递 所以它们应该是有意义的 并且使用哈希进行真正的路由
  • a4j:commandLink 重新渲染后停止工作

    我创建了这个测试用例来隔离我的问题 一旦轮询执行 ajax 更新 a4j commandLink 操作就不会执行 如果我们在轮询重新渲染之前关闭 modalPanel 则会执行它 有什么建议吗 提前致谢 测试 xhtml

随机推荐

  • 无法启动 iOS 8 模拟器

    我刚刚从 Mac App Store 将 Xcode 更新到 6 0 1 我的操作系统版本是 OS X 10 9 5 问题是 iOS 8 模拟器无法加载 但 iOS 7 模拟器工作正常 每次我尝试启动 iOS 8 模拟器设备时 都会收到一条
  • add_lvalue_reference_t 和 T& 之间的区别

    假设你有一个模板参数T 两者有什么区别 add cv t
  • OpenCV (Emgu.CV)——使用 alpha 合成图像

    我正在使用 Emgu CV 执行一些基本的图像处理和合成 我的图像加载为Image
  • 获取 foreach 循环中的下一个元素

    我有一个 foreach 循环 我想查看循环中是否有下一个元素 以便我可以将当 前元素与下一个元素进行比较 我怎样才能做到这一点 我已阅读有关当前和下一个功能的信息 但我不知道如何使用它们 一种独特的方法是反转数组并then环形 这也适用于
  • TRestClient/TRestRequest 错误地解码 gzip 响应

    我尝试读取 REST API 它是 gzip 编码的 确切地说 我尝试阅读 StackExchange API 我已经找到问题了自动解码 TRESTResponse 中的 GZIP 但由于某种原因 这个答案并不能解决我的问题 测试设置 在X
  • 即使已处理异常,在 VS2010 调试器中也会出现未处理的异常

    我在使用 VS2010 时遇到一个问题 调试器因未处理的异常而停止 不过 异常肯定是得到处理的 事实上 如果我将代码放入 catch 块中 当我按 F5 时就会命中它 在 调试 gt 异常 中 我肯定会这样做not选中 抛出 复选框 因此
  • 挥发性与原子性[重复]

    这个问题在这里已经有答案了 我在下面的某处读到 Java volatile 关键字并不意味着原子 这是它的常见误解 声明 volatile 后 操作将是原子的 以使 您仍然需要使用原子操作来确保独占访问synchronizedJava 中的
  • WCF平台是否独立?

    我只需要知道 WCF 是否像 Webservices 一样与平台无关 Java和Php可以访问WCF中的函数吗 Thanks 是的 当然 WCF 本身只能在 Windows 上运行 但它提供的服务可以从任何其他语言 工具访问 使用 WCF
  • 我可以在基类中重载纯虚方法吗?

    在下面的示例中 我有一个带有纯虚方法 又名 FUN1 和普通方法 又名 FUN2 的抽象类 include
  • 使用返回 impl 特征的泛型函数“借用的值寿命不够长”

    我从这个 Rust 代码中得到一个意外的错误 struct Container lt a gt x a i32 trait Reply impl Reply for i32 fn json
  • For 循环内的 Postgresql 更新

    我对 postgresql 还很陌生 并且在使用 for 循环更新表中的空值列时遇到问题 我正在处理的表格很大 因此为了简洁起见 我将给出一个较小的示例来说明要点 采取下表 id A B C a 1 0 NULL b 1 1 NULL c
  • 如何刷新列表框的数据源

    表单有1个Combobox和1个ListBox 单击 添加 按钮时 我想将组合框中的所选项目添加到列表框中 public partial class MyForm Form List
  • 关闭电脑

    有没有办法使用内置的 Java 方法关闭计算机 创建您自己的函数以通过以下方式执行操作系统命令命令行 举个例子 但正如其他人指出的那样 知道您想要在何处以及为何使用它 public static void main String arg t
  • 如何在 Spring 控制器中检索 FORM/POST 参数?

    我有以下回应 应该来自邮件黑猩猩网络钩子 URL 这是行正文 RAW BODY type usub fired at 2015 07 23 17 3A19 3A34 data 5Baction 5D unsub data 5Breason
  • 禁用 PHPhotoLibrary 中删除请求的确认

    我想做的是将视频保存到 PHPhotoLibrary 然后在应用程序中上传到客户端远程服务器完成时删除它们 基本上 照片库充当临时存储 以添加额外的安全层 以防万一发生任何故障 我已经将我的视频保存在应用程序目录中 Problem 问题是要
  • 使用 Java 从 Github 下载二进制文件

    我正在尝试下载此文件 http github com downloads TheHolyWaffle ChampionHelper ChampionHelper 4 jar 用下面的方法 它似乎不起作用 我收到一个空 损坏的文件 Strin
  • 有没有办法使用curse在同一终端上创建单独的显示和输入?

    我想编写一个命令行程序来生成以下用户界面 A B A 是一个单独的进程 它循环并显示实时事件列表 它会自动刷新 B 是命令提示符 它固定在底部并有命令历史记录 我知道一些命令行 IRC 程序会执行此操作 因此它一定是可能的 如果您能给我一个
  • Stargazer 输出是代码,而不是表格

    我正在尝试使用 RStudio 中的 stargazer 包来生成数据汇总表 由于某种原因 当我使用 html 或 Latex 代码时 我无法查看输出中的表格 但当我输出为文本时 我可以看到它 一个例子 library stargazer
  • 类型错误:google.visualization.DataTable 不是构造函数

    在我的网页上有一个谷歌地图 以及三个图表 当页面加载时 地图很好 但图表要么不加载 要么只有一两个加载 不断收到错误 TypeError google visualization DataTable 不是构造函数 function load
  • 获取返回 StreamedContent 的 的具体 URL

    为了使用灯箱 我需要一个指向由以下命令生成的图像的链接