我使用ajax提交我的jsp页面数据而不刷新liferay自定义portlet中的页面。
我面临两个问题:
当我向资源服务器方法调用Ajax函数时,它获取该方法中的所有ajax数据,但是当一切都完成后,那么在成功时我无法得到任何数据作为回报。 那么在成功执行Ajax函数后如何获得一些数据呢。
我在表单中使用了简单的HTML文件上传控件,当我使用简单的提交方法时,我调用上传请求获取文件的所有属性
并且还使用上传请求上传文件,但是在Ajax的情况下,我必须在动作类的资源服务器方法中执行资源操作的所有操作
并且我通过上传请求获得所有null
值,以便如何解决此问题?
我提供了一个示例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);
}
}
答案 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。