您好我正在开发动态网络项目。
从jsp页面中选择文件。 ajax被称为。 然后去servlet。 并设置上下文属性。
我添加了示例代码。 如果任何人有一些与如何更新上下文对象相关的想法...使用ajax ...
但上下文对象未更新。
JSP页面
<html>
<script>
$(document).ready(function(){
$(':file').change(function(){
var fileObj = this.files[0];
var fd = new FormData();
fd.append( 'file', fileObj);
var form = $('#f1');
alert(<%=context.getAttribute("uploadFile")%>); //false
$.ajax({
url:form.attr('action'),
type:form.attr('method'),
data:fd,
processData: false,
contentType: false,
async:false,
}).done(function(data){
alert('ajax complete');
//context object is not updated after ajax called...
alert(<%=context.getAttribute("uploadFile")%>); //false
<%context = getServletContext();%>
alert(<%=context.getAttribute("uploadFile")%>); //false
});
});
});
</script>
<form name="f1" id="f1" action="/test" method="post">
<input type="file"/>
</form>
</html>
Servlet代码
if(ServletFileUpload.isMultipartContent(request)){
try{
List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for(FileItem item : multiparts){
if(!item.isFormField()){
//File upload logic
}
}
}catch(Exception ex){
ex.printStackTrace();
}
context.setAttribute("uploadFile",true); //set context attribute
答案 0 :(得分:0)
SerlvetContext是服务器端对象。您的JavaScript在客户端上执行,无法访问它。您需要让Servlet发送某种响应(简单的String,JSON或XML),这些响应将在传递给JQuery函数的数据对象中可用:
.done(function(data){
alert(data);
});
向Servlet添加一些代码以发送响应:
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("File Uploaded");
}