在 JSF 中显示上传的图像

2023-11-26

我有一个视图范围的 bean,我在其中创建了一个人。一个人可以有一张照片。这张照片上传到创建此人的同一页面。图片未存储在数据库或磁盘上(因为尚未创建该人)。该 bean 必须具有视图作用域,因为可以在其他地方创建人员并且使用相同的 bean。如果 bean 是会话范围的,并且用户上传了图片但没有保存该人员,则该图片将在用户下次尝试创建人员时显示。

我用两个豆子解决了这个问题;一个视图作用域 bean 用于创建人员,一个会话作用域 bean 用于上传图片并以流形式获取图片。然而,这会导致上述问题。

我怎样才能以更好的方式解决这个问题?

上传bean:

@ManagedBean(name = "uploadBean")
@SessionScoped
public class UploadBean
{
    private UploadedFile    uploadedFile;

    public UploadedFile getUploadedFile()
    {
        return uploadedFile;
    }

    public StreamedContent getUploadedFileAsStream()
    {
        if (uploadedFile != null)
        {
            return new DefaultStreamedContent(new ByteArrayInputStream(uploadedFile.getContents()));
        }
        return null;
    }

    public void uploadFile(FileUploadEvent event)
    {
        uploadedFile = event.getFile();
    }
}

create-a-person bean:

@ManagedBean(name = "personBean")
@ViewScoped
public class PersonBean
{
    private Person newPerson = new Person();

    public Person getNewPerson()
    {
        return newPerson;
    }

    private UploadedFile getUploadedPicture()
    {
        FacesContext context = FacesContext.getCurrentInstance();
        ELContext elContext = context.getELContext();
        UploadBean uploadBean = (UploadBean) elContext.getELResolver().getValue(elContext, null, "uploadBean");
        return uploadBean.getUploadedFile();
    }

    public void createPerson()
    {
        UploadedFile uploadedPicture = getUploadedPicture();
        // Create person with picture;
    }
}

相关的JSF页面部分:

<h:form enctype="multipart/form-data">
    <p:outputPanel layout="block" id="personPicture">
        <p:graphicImage height="150"
            value="#{uploadBean.uploadedFileAsStream}"
            rendered="#{uploadBean.uploadedFileAsStream != null}" />
    </p:outputPanel>
        <p:fileUpload auto="true" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
            fileUploadListener="#{uploadBean.uploadedFile}"
            update="personPicture" />
    <p:commandButton value="Save" actionListener="#{personBean.createPerson()}"/>
</h:form>

我采取了不同的方法。我最初是为了显示上传的图像,但是如果Person尚未创建,将其全部保留在客户端似乎是一个更好的主意。我发现这个问题并根据所选答案创建以下内容:

在我的头部包括html5shiv如果浏览器是IE且版本小于9为了兼容:

<h:outputText value="&lt;!--[if lt IE 9]&gt;" escape="false" />
<h:outputScript library="js" name="html5shiv.js" />
<h:outputText value="&lt;![endif]--&gt;" escape="false" />

要显示/上传图像,我有以下元素:

<p:fileUpload binding="#{upload}" mode="simple"
    allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
    value="#{personBean.uploadedPicture}"/>
<p:graphicImage value="#" height="150" binding="#{image}" />

还有一些 JavaScript/jQuery 魔法:

function readPicture(input, output)
{
    if (input.files && input.files[0])
    {
        var reader = new FileReader();
        reader.onload = function(e)
        {
            output.attr('src', e.target.result);
        };
        reader.readAsDataURL(input.files[0]);
    }
}

$("[id='#{upload.clientId}']").change(
    function()
    {
        readPicture(this, $("[id='#{image.clientId}']"));
    });

The uploadedPicture属性现在是一个简单的属性:

@ManagedBean(name = "personBean")
@ViewScoped
public class PersonBean
{
    private UploadedFile uploadedPicture;

    public UploadedFile getUploadedPicture()
    {
        return uploadedPicture;
    }

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

在 JSF 中显示上传的图像 的相关文章

随机推荐

  • 测试两个 __m128i 变量之间的相等性

    如果我想在两个之间进行按位相等测试 m128i变量 我是否需要使用 SSE 指令或者我可以使用 如果不是 我应该使用哪条SSE指令 虽然使用 mm movemask epi8是一种解决方案 如果您有一个带有 SSE4 1 的处理器 我认为更
  • 获取点击事件中按钮的 ID/名称。网络

    我在 VB NET 中有一个事件可以同时处理多个按钮单击 我需要知道选择的哪个按钮启动了事件 有什么想法如何做到这一点 我的代码如下 Private Sub Answer Click ByVal sender As System Objec
  • 检查字符串中是否包含表情符号

    我用这个得到字符串的文本大小 textSize tempDict valueForKeyPath caption text sizeWithFont UIFont systemFontOfSize 12 constrainedToSize
  • 在 C 套接字编程中刷新套接字流

    我想知道如何在用 C 进行套接字编程时刷新套接字流 我尝试了所有选项设置TCP NODELAY使用以下代码 setsockopt sockfd IPPROTO TCP TCP NODELAY char flag sizeof int 注 所
  • 当窗体具有许多下拉列表控件时,C#.net windows 窗体调整大小的速度缓慢

    我制作了一个带有许多下拉列表的 Windows 窗体 这些下拉列表放置在网格 不是数据网格 内 当我在所有这些窗体中使用anchor left right top Bottom 和 dock fill 选项时 窗体调整大小在运行时会变慢 停
  • 使用 Python 从非结构化文本中提取人的年龄

    我有一个行政档案数据集 其中包括简短的传记 我正在尝试使用 python 和一些模式匹配来提取人们的年龄 一些句子的例子是 邦德先生 67 岁 是英国的一名工程师 阿曼达 B 拜恩斯 Amanda B Bynes 34 岁 是一名演员 彼得
  • 如果所有汇总值均为 NA,则 dplyr 汇总保留 NA

    我想使用 dplyr summarize 按组对计数进行求和 具体来说 如果并非所有求和值都是 NA 我想删除 NA 值 但如果所有求和值都是 NA 我想显示 NA 例如 name lt c jack jack mary mary elle
  • PL/SQL FOR 循环隐式游标

    有2张桌子EMPLOYEES and DEPARTMENTS with department id作为主键DEPARTMENTS和外键EMPLOYEES 我想打印属于特定部门的所有员工姓名 我知道它可以通过 JOINS 或 JOINS 轻松
  • 为什么在 Windows 终端中用 Python 进行彩色打印不起作用? [复制]

    这个问题在这里已经有答案了 我可以在 ipython 中以绿色打印 test1 并以红色打印 test2 print 033 92m test1 print 033 91m test2 但在终端中以白色打印出以下错误 92mtest1 91
  • 如何确定我的 python shell 是在 32 位还是 64 位中执行?

    如何从 shell 内部判断 shell 处于什么模式 我试过看platform模块 但它似乎只是告诉您 用于可执行文件的位体系结构和链接格式 我的二进制文件被编译为 64 位 我在 OS X 10 6 上运行 因此即使我使用这些方法 它似
  • 无法加入字符串类型的 pandas 数据框

    我有两个 DataFrames 对象 其列如下 数据框1 df dtypes Output ImageID object Source object LabelName object Confidence int64 dtype objec
  • 从 C# 代码从 SQLite 导入/导出 CSV

    我正在尝试找出一种使用 System Data SQLite 将 CSV 文件加载到 SQLite DB 的简单方法 我看到了命令行方式来做到这一点 即 Import mydata csv mytable 但我需要通过 C 代码来完成此操作
  • F# 中使用守卫与 if/else 结构进行模式匹配

    在 ML 系列语言中 人们倾向于更喜欢模式匹配if else构造 在 F 中 在模式匹配中使用防护可以轻松替换if else在很多情况下 例如 一个简单的delete1可以在不使用的情况下重写函数if else see delete2 le
  • ASP.NET MVC + Fluent nNibernate,什么IoC工具?

    我正在开发一个 ASP NET MVC 项目 我们决定使用 Fluent nHibernate 进行数据访问 为了实现松耦合 我们采用 IoC DI 模式 我的问题是该选择什么 IoC 工具 我试图找出 Windsor ninject sp
  • C# 中数组索引的类型?

    C 中数组索引的类型是什么 例如 在下面的代码中 在访问数组元素 第三行 之前 索引是否会被转换为 int T myArray new T 255 byte index 2 T element myArray index 如果不是 使用 b
  • 是否可以使用其他 cpp 文件中的#define?

    我认为预处理器会一一处理文件 而我不知道如何使用包含来处理文件 所以我认为这是不可能的 但很高兴听到其他人的想法 我有在a cpp define A 1 我想用它2 cpp 编辑 我无法修改第一个文件 所以现在我只是复制了定义 但问题仍然存
  • HTML 转 PDF 与通过 PHP 以编程方式创建 PDF

    我有一个 PHP 应用程序 需要生成一些带有漂亮页眉 页脚的 PDF 发票和 PDF 时间表 一些 Stackoverflow 用户建议使用 TCPDF 创建 PDF 文档 在我的研究中 我发现了两种生成 PDF 的方法 1 以编程方式格式
  • 如何在 IE 中的文档上触发“onload”事件

    我目前正在为 Javascript 方法开发单元测试 用于检测文档的准备情况 该代码已经处于框架级别 因此请避免提及已在 jQuery 或其他库中实现的代码 我已使用以下代码成功模拟了 readystatechange 更改事件 var e
  • 从 scala 使用 Function java 接口的流畅方式?

    在工作中 大多数人都使用 Java 而我则使用 Scala 我们决定将一些常见的类收集到一个用 Java 编写的库中 现在我想向库中添加一些伪函数式编程 看看以下内容 java public interface Func
  • 在 JSF 中显示上传的图像

    我有一个视图范围的 bean 我在其中创建了一个人 一个人可以有一张照片 这张照片上传到创建此人的同一页面 图片未存储在数据库或磁盘上 因为尚未创建该人 该 bean 必须具有视图作用域 因为可以在其他地方创建人员并且使用相同的 bean