如何使用ajax调用获取文件名和其他请求的参数到serveResource方法?

时间:2012-11-07 05:02:26

标签: ajax jquery file-upload portlet liferay-6

我使用ajax提交我的jsp页面数据而不刷新liferay自定义portlet中的页面。

我面临两个问题:

  1. 当我向资源服务器方法调用Ajax函数时,它获取该方法中的所有ajax数据,但是当一切都完成后,那么在成功时我无法得到任何数据作为回报。 那么在成功执行Ajax函数后如何获得一些数据呢。

  2. 我在表单中使用了简单的HTML文件上传控件,当我使用简单的提交方法时,我调用上传请求获取文件的所有属性 并且还使用上传请求上传文件,但是在Ajax的情况下,我必须在动作类的资源服务器方法中执行资源操作的所有操作 并且我通过上传请求获得所有null值,以便如何解决此问题?

  3. 我提供了一个示例Ajax调用和我的资源服务器方法

    这是我在jsp页面中的简单ajax调用

    <script type="text/javascript">
        function addToDo(addToDo) {
            var todo = document.getElementById('toDo').value;
    
            alert("");
    
            var adv_name = document.getElementById('advertise_name').value;
            var keywords = document.getElementById('keywords').value;
            var adv_url = document.getElementById('adv_url').value;
            var fileUpload = document.getElementById('fileUpload').value;
    
            var mediatype= $('#mediatype option:selected').val();
    
            $.ajax({
                url :addToDo,            
                data: {
                    "todo":todo,
                    "adv_name":adv_name,
                    "mediatype":mediatype,
                    "keywords":keywords,
                    "adv_url":adv_url,
                    "fileUpload":fileUpload,
                    "CMD":"addToDo"
                },
                type: "GET",
                timeout: 20000,
                dataType: "text",
                success: function(data) {
                    alert(data);
                    //when i alert this data..its always null
                }
            });
        }
    </script>
    

    以下是我的上传控件:

    <label>Browse</label>
    <input name="fileUpload" id="fileUpload" type="file" />
    <span id="restError2" style="color: #C62626;" class="help-block"></span>
    

    在一个按钮上我调用ajax方法,并重定向到resorce服务器方法,如下所示:

    @Override
    public void serveResource(ResourceRequest request, ResourceResponse response){
        if(request.getParameter("CMD").equals("addToDo")) {
            System.out.println("came here for add");
    
            // here am converting this resource request to uploadportletrequest because i have enctype="multipart/form-data"
            UploadPortletRequest uploadReq = PortalUtil.getUploadPortletRequest(request);
    
            sourceFileName = uploadReq.getFileName("fileUpload");// uploaded
            // filename                 
    
            advertise_name = uploadReq.getParameter("advertise_name"); //this value getting null
            adv_link = uploadReq.getParameter("adv_url"); //this value getting null
            keyword = uploadReq.getParameter("keywords"); //this value getting null
            String resourceID = request.getResourceID();
    
            System.out.println(resourceID);
        }
    }
    

1 个答案:

答案 0 :(得分:1)

关于第一个问题,请参阅this SO answer

对于第二个问题,我会说你缺少参数的前缀。

所以尝试将你的ajax调用更改为(我只更改你在serveResource方法中提到的字段为null)

        $.ajax({
        url :addToDo,            
        data: {
            "todo":todo,
            "<portlet:namespace />adv_name":adv_name,
            "mediatype":mediatype,
            "<portlet:namespace />keywords":keywords,
            "<portlet:namespace />adv_url":adv_url,
            "fileUpload":fileUpload,
            "CMD":"addToDo"
        },
        type: "GET",
        timeout: 20000,
        dataType: "text",
        success: function(data) {
            alert(data);
            //when i alert this data..its always null
        }
    });

并确保

<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet" %>

在你的jsp顶部。

另请注意,在您的serveResource方法中,您有

advertise_name = uploadReq.getParameter("advertise_name");

但发送"adv_url":adv_url,,请注意名称。

另外需要注意的是,您使用的是GET而不是POST。

另外要记住的是,在所有浏览器中都不支持使用ajax上传文件。有关支持的浏览器列表,请参阅this