如何将图像加载到<;部门>;在JavaStruts2中使用ajax/jquery将图像上传到服务器后,是否自动无需刷新页面?

如何将图像加载到<;部门>;在JavaStruts2中使用ajax/jquery将图像上传到服务器后,是否自动无需刷新页面?,java,jquery,ajax,struts2,upload,Java,Jquery,Ajax,Struts2,Upload,我有一个问题,当我试图加载到标签图像自动刷新页面后,图像上传到服务器。我的项目是基于Java的Struts 2框架 这是上传文件模型。(FileUpload.java) 这是上传文件的动作。(FileUploadAction.java) 这是jsp文件。(UserRegister.jsp) 现在我可以将图像上传到服务器,并将图像加载回“UserRegister.jsp”中的。但是,如果我在表单中写入“用户名”后上载图像,“用户名”将在加载图像时丢失 所以,我的问题是如何在图像上传到服务器后

我有一个问题,当我试图加载到标签图像自动刷新页面后,图像上传到服务器。我的项目是基于Java的Struts 2框架

这是上传文件模型。(FileUpload.java)


这是上传文件的动作。(FileUploadAction.java)


这是jsp文件。(UserRegister.jsp)


现在我可以将图像上传到服务器,并将图像加载回“UserRegister.jsp”中的。但是,如果我在表单中写入“用户名”后上载图像,“用户名”将在加载图像时丢失

所以,我的问题是如何在图像上传到服务器后,在不刷新页面的情况下自动加载标签


多谢各位

这与客户端的关系大于与服务器端的关系。 首先,为了在不重新加载页面的情况下发布/提交数据,需要使用Ajax或XMLHttpRequest

使用Ajax的示例如下:

但就个人而言,对于文件上传,我会使用XMLHttpRequest(xhr)(请注意,这与Ajax非常相似,原因是xhr有一种更干净的方式来监控上传进度,这通常是一个好的上传界面所需要的)

函数上传(){
//获取文件。
var files=$('input#file_upload')。文件;
var xhr=new XMLHttpRequest();
xhr.open('post','/home/upload',true);
//完成后,获取链接并将其添加到div。
xhr.onreadystatechange=函数(状态){
如果(xhr.readyState==4&&xhr.status==200){
var link=xhr.responseText;
$('div.image').innerHTML(“”);
}
};
//发送请求
var form=new FormData();
form.append('file',file);
发送(表格);
}
因此,最终,使用ajax(或xhr),您根本不需要html中的表单标记来提交文件


[编辑]:我已编辑url路径和输入标记id以匹配您的代码。请再试一次。

如果您想在不刷新的情况下执行此操作,则必须使用AJAX

如果您只是想在上载图像时保留一些值,可以将这些值放在上载操作中,并放大
标记以包含它们(请注意,
用户名和
用户都将
输入作为名称,但它们应该不同)

差不多


在行动中

public class FileUploadAction extends ActionSupport implements ServletRequestAware {
    public FileUpload fileUpload = new FileUpload();
    public String username;
    /* GETTERS AND SETTERS */

如果要传递很多值,可以创建包含参数的bean(例如InputParameters),因此

    public FileUpload fileUpload = new FileUpload();
    public String username;
    public Integer age;
    public String country;
在你的行动中

    public FileUpload fileUpload = new FileUpload();
    public InputParameters input;
和在JSP页面中


如果您需要在许多表单中使用fileupload操作,每个表单都有不同的数据要发布/检索,那么您可以使用输入参数接口,或者使用继承来扩展基本fileupload操作以满足每个页面的需要

我并不是说这比使用AJAX好或坏,这只是另一种值得了解的方式


附言:使用Struts标签通常比使用纯HTML好。。。他们是来帮忙的;)

我不使用struts,因此如果我没有理解您的问题,我深表歉意。通常,在图像上传到服务器后,您应该存储一个指向该图像的链接,并将其发送回javascript客户端代码。客户端的JQuery可以获取链接并将其添加到div中。为什么不使用JQuery和ajax上传文件呢?谢谢MikeNQ。我已经存储了链接,但是现在我不能只刷新标签了。嗨,可怕的袋熊,我是java-struts-jquery-ajax项目的新手。因此,请解释如何在此任务中使用jquery和ajax。非常感谢。看看这个谢谢米肯克的回答。但是你的回答对我不起作用。在我的页面中有一些文本框和图像。首先,用户在文本框中输入一些文本,然后选择要上传的图像。当用户选择图像时,图像将上载到服务器,然后从服务器加载回来显示在此页面上,但不刷新页面(只刷新标记)。您能否解释错误或其不起作用的原因?你可以通过我的电子邮件与我联系,因为我们可以用越南语交流,以便更好地理解。:)请告诉我你的电子邮件地址,以便我可以通过电子邮件与你联系。我在你的stackoverflow帐户中看不到你的电子邮件。天哪。。。除了其他人可能对该解决方案感兴趣之外,它最好留在StackOverflow(评论中也有一个永久性的聊天,而且比大量邮件更实时)。。。永远不要在网页上清楚地写下你的电子邮件地址:|否则你将因以下原因受到垃圾邮件发送者的迫害:life@Bentley:对此有何反馈?
$(function() { 
    $( "#file_upload" ).change(function() {
        document.myForm.submit();
    });
});
function upload(){
    // Get the files.
    var files = $('input#file_upload').files;

    var xhr = new XMLHttpRequest();
    xhr.open('post','/home/upload', true);

    // Done, get the link and add it to the div.
    xhr.onreadystatechange=function(status){
        if (xhr.readyState==4 && xhr.status==200){
            var link = xhr.responseText;
            $('div.image').innerHTML('<img src="'+link+'"></img>');
        }
    };

    // Sending request
    var form = new FormData();
    form.append('file',file);
    xhr.send(form);
}
public class FileUploadAction extends ActionSupport implements ServletRequestAware {
    public FileUpload fileUpload = new FileUpload();
    public String username;
    /* GETTERS AND SETTERS */
    public FileUpload fileUpload = new FileUpload();
    public String username;
    public Integer age;
    public String country;
    public FileUpload fileUpload = new FileUpload();
    public InputParameters input;