文件上传|无需刷新页面 |支柱2 |无闪光|

2023-12-08

问题描述:我想使用JSP创建一个文件上传屏幕。该屏幕将允许用户在屏幕上选择多个文件,但所有文件都只有一个“上传”按钮。单击上传按钮后,应在 Action 类中获取所有文件对象。

但重要的是提交后页面不应该刷新。同一屏幕上还会显示其他信息,这些信息在文件上传过程中不应更改。

我的尝试:我使用了简单的 struts2 文件上传功能,效果很好。但提交时正在刷新页面。 我使用 AJAX (JQuery) 来解决这个问题。我在使用 AJAX 时遇到的问题是它没有将 File 对象设置到 Action 类的 file 属性中。因此我无法获取 Action 类中的文件对象并进一步处理。

谁能帮我解决这个问题吗?

我附上了迄今为止我所尝试过的代码。

JSP:

<s:form action="fileUpload" method="post" enctype="multipart/form-data" >
<s:file id="file" name="userImage" cssClass="fileUpload" cssStyle="fileUpload" />
<button id="px-submit">Upload</button>      
</s:form>

<script type="text/javascript">
jQuery(function($){
$('.fileUpload').fileUploader();
});
</script>

jQuery 插件: 这是我用过的jquery插件。

动作类:

public class FileUploadAction extends ActionSupport{

private File userImage;

public File getUserImage() {
    return userImage;
}

public void setUserImage(File userImage) {
    this.userImage = userImage;
}

public String execute()
{
    try
    {
        System.out.println("file name: " + userImage.toString());

    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

    return SUCCESS;
}

编辑:这是我的 struts 配置文件。

Struts.xml

<action name="commonDataImportAction_*" class="xxx.Action">
<result name="SUCCESS" type="stream">
            <param name="contentType">text/html</param>
             <param name="inputName">inputStream</param>
        </result>

由于文件对象未设置,我在这里得到一个空指针。

请帮忙。

提前致谢。 高拉夫


我正在使用相同的插件,它对我来说工作得很好。我在您的代码中看到的第一个问题是您尚未设置要提交的上传按钮的类型。

<button id="px-submit" type="submit">Upload</button>

希望这应该可以解决空指针异常。 另外,正如这个插件文档中提到的,您需要返回一个 json 字符串

<div id='message'>success message</div>

上传成功后。所以您需要更改 struts.xml 映射。 尝试一下,如果您遇到任何其他问题,请回复我。 编辑: 好的,这是您要求的我的代码

JSP

<form action="uploadImage" method="post" enctype="multipart/form-data">
   <input type="file" name="image" class="fileUpload" multiple/>
   <button id="px-submit" type="submit">Save all images</button>
   <button id="px-clear" type="reset">Clear all</button>
</form>

$('.fileUpload').fileUploader({
          autoUpload: false,
          buttonUpload: '#px-submit',
          buttonClear: '#px-clear',
});

动作类

您需要返回流结果。我正在使用一个插件(struts2 jquery 插件)它的处理方式各不相同,但是你dont仅因为这一要求而必须使用它,相反,我为您提供了一段代码来返回流结果,而不使用任何插件。(取自here)

public class UploadImageAction extends ActionSupport{
        private File image;
        private String imageContentType;
        private String imageFileName;
        //getter/setter for these
        public String execute() {
         String status="";         
        try{
              //save file code here    
         status="<div id='message'>successfully uploaded</div>"; //on success
         inputStream = new StringBufferInputStream(status);
        }catch(WhateverException e){
         status="<div id='status'>fail</div><div id='message'>Your fail message</div>"; //on error
         inputStream = new StringBufferInputStream(status);
         //other code
        }

        return SUCCESS;
    }
    private InputStream inputStream;

    public InputStream getInputStream() {
       return inputStream;
    }
}

struts.xml

<action name="fileUpload" class="com.xxx.action.UploadImageAction">  
    <result type="stream">
      <param name="contentType">text/html</param>
      <param name="inputName">inputStream</param>
    </result>
  </action>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件上传|无需刷新页面 |支柱2 |无闪光| 的相关文章

随机推荐

  • 导航到不同 ViewController 时 BLE 外设断开连接

    我正在开发具有多个 ViewController 的 BLE iOS Swift 应用程序 主 ViewController 有一个按钮 可导航到 TableViewController 该按钮已检测到要连接的 BLE 设备 但是 当我返回
  • 当 STDIN、STDOUT 和 STDERR 关闭时 perl bug?

    当编写守护进程时 我想关闭 STDIN STDOUT 和 STDERR 以实现 良好的守护进程行为 但我很惊讶 随后打开的文件需要与旧的 STDIN STDOUT 和 STDERR 相同的属性 因为它们的 fileno s 被重新打开 这是
  • XML 中“图像上缺少 contentDescription 属性”

    我收到一条警告 辅助功能 图像上缺少 contentDescription 属性在日食中 此警告显示在第 5 行 声明ImageView 在下面的 XML 代码中 构建和运行我的应用程序时不会出现任何错误 但我真的很想知道为什么我会收到这个
  • 如何找到有关文件描述符的更多信息?

    我正在尝试调试一个挂起的进程 进程 id 的 strace 输出有最后一行 recvfrom 9
  • 在 Android 上以静音模式播放声音时出现问题

    我正在编写一个Android应用程序 无论手机处于何种模式 即使它处于静音模式 都可以简单地播放闹钟 我找到了这个question并使用答案中的代码来覆盖当前的音量状态 我的代码如下所示 Uri alert RingtoneManager
  • 如何在WordPress中使用媒体上传来上传视频文件?

    我有一个帖子类型 用于在 WordPress 中上传横幅 使用名称 图像 视频和 url 的自定义字段 默认媒体上传可以很好地上传图像 视频 但我的问题是我无法将视频基本网址获取到自定义字段 这是我的代码 无法获取视频网址 它只给我视频文件
  • Mapstruct:使用加法器时清除更新集合

    我尝试将 DTO 对象映射到 JPA 实体 我有一个集合children in my ParentEntity 可以添加它们addChild Mapstruct 通过以下方式支持使用加法器CollectionMappingStrategy
  • JButton() 仅在鼠标悬停时起作用

    import java awt import java awt image import java awt event import javax imageio import java lang import java io import
  • json.net 将字符串反序列化为嵌套类

    我收到从 http 请求返回的 Json 字符串 如下所示 info calls 0 errors error1 error2 error3 messages 0 mail 3 received 5 valid 3 我试图反序列化的实体的结
  • 如何在 MySQL 替换命令中使用正则表达式?

    我的目标是用包罗万象的链接替换数据库中的链接 我通常使用 REPLACE 命令来替换数据库中的字符串 但这次我遇到了困难 因为为了找到链接 我需要使用正则表达式 而这根本行不通 UPDATE node revisions SET body
  • R 抑制依赖项中的startupMessages

    我的 R 包的依赖项之一在加载时显示启动消息 我想抑制这些启动消息 到目前为止 我发现的唯一修复是从我的描述文件中的 Depends 行中删除有问题的包 然后打电话suppressPackageStartupMessages require
  • Android 选项卡 - 开始一个新活动

    TabHost 中有 4 个选项卡 分别是 A B C 和 D 现在每个选项卡只是一个索引页 单击其中任何一个都会显示不同的活动 问题是 当用户从选项卡中显示的内容中选择某些内容时 我需要启动另一个活动 其他活动也应该显示在父选项卡本身中
  • 使用谷歌分析跟踪重定向页面

    我正在尝试使用谷歌分析跟踪重定向页面 我有一个名为redirect php 当我访问像这样的网址时redirect php c 12345678 一个 php 函数对 sql 查找表进行查询以解码代码12345678使用先前插入的 url
  • 有条件地生成表格行中断

    我有一个 table 有两个单元格 如果设备是计算机 我想水平显示 如果设备是移动设备 我想垂直显示 我借用了一个JS函数来从这个答案中检测移动设备https stackoverflow com a 11381730 3298930效果很好
  • 在 PyGame 中,如何在不使用 sleep 函数的情况下每 3 秒移动一个图像?

    最近我学习了一些基本的Python 所以我正在使用PyGame编写一个游戏来提高我的编程技能 在我的游戏中 我想每3秒移动一个怪物的图像 同时我可以用鼠标瞄准它并点击鼠标射击它 一开始我尝试使用时间 睡眠 3 但结果却暂停了整个程序 并且我
  • iCloud 仪表板:无法将 CloudKit 架构部署到生产环境 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我有一个已发布的应用程序 具有现有的生产模式 我对开发模式进行了更改 现在我想部署到生产中 点击后Deploy Schema to Production 弹出对话框显示The
  • Python 中的 CSV 在 Windows 上添加额外的回车符

    import csv with open test csv w as outfile writer csv writer outfile delimiter quoting csv QUOTE MINIMAL writer writerow
  • Python Tkinter 滑块自定义

    I m new with tkinter and I want to create a slider like the one in this picture 但我不知道这是否可能 所以我的问题是 这可能吗 有人为我提供快速教程或其他东西吗
  • 使用 rlang 将权重传递给 glm()

    我想通过weights to glm 通过函数而无需使用eval substitute or do call 方法 但使用rlang 这描述了一个更复杂的底层函数 Toy data mydata dplyr tibble outcome c
  • 文件上传|无需刷新页面 |支柱2 |无闪光|

    问题描述 我想使用JSP创建一个文件上传屏幕 该屏幕将允许用户在屏幕上选择多个文件 但所有文件都只有一个 上传 按钮 单击上传按钮后 应在 Action 类中获取所有文件对象 但重要的是提交后页面不应该刷新 同一屏幕上还会显示其他信息 这些