急救在java 中 ajax 怎么调用不到Action

ke0825 2009-04-09 09:49:13
我写了一个ajax 调用一个saveResume.do的Action 想实现 无刷新的提交数据 并给前台提示信息
但感觉调用不了action 各位大哥帮帮小弟啊 在此感谢
form_js 代码
//创建httpRequest
var createAjaxObj=function()
{
var httpRequest=false;

if(window.XMLHttpRequest){// 如果为Mozilla,Safari等浏览器
httpRequest = new XMLHttpRequest();
if(httpRequest.overrideMimeType){
httpRequest.overrideMimeType('text/xml');
}
}else if(window.ActiveXObject){
try{
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
httpRequest =new ActiveXObject( "Microsoft.XMLHTTP ");
}catch(e){}

}
}
return httpRequest;
};
var sendReq=new createAjaxObj();
function sendMsg()
{
var contentType = "application/x-www-form-urlencoded; charset=utf-8";
sendReq.open("post","saveResume.do",true);//发送至saveResume.do

sendReq.setRequestHeader("Content-Type", contentType);
sendReq.onreadystatechange=sendRequest;
sendReq.send(null);
}
function sendRequest()
{
if(sendReq.readyState==4)

if(sendReq.status==200)
{
alert(sendReq.responseText);

}

}

<script src="js/form_js.js" type="text/javascript"> </script>
<form name="resume" method="post" action="" onsubmit="sendMsg();" enctype="multipart/form-data">
上传个人照片: <input type="file" name="photo" id="photo"/> <br>
<input type="submit" value="保存" name="ok" > <br>
</form>
saveResume.do 代码
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws IOException {
SaveResumeForm saveResumeForm = (SaveResumeForm) form;// TODO Auto-generated method
PersonalService addresume=new PersonalService();//实例化addresume服务层
Per_resume per_resume=new Per_resume();//获取持久化对象
/**************上传图片************/
FormFile myFile=saveResumeForm.getPhoto();//获得上传的文件
UploadFile uploadFile=new UploadFile();
String dir=request.getRealPath("/upload")+"/";
int filesize=myFile.getFileSize();//获取上传文件的大小
String filename=myFile.getFileName();
String filetype=filename.substring(filename.lastIndexOf(".")+1);//获取文件类型
System.out.println("文件类型为:"+filetype);
HttpSession session=request.getSession();//得到一个session

if(filesize>50*1024)
{
//request.setAttribute("msg", "文件大小超过50kb");
PrintWriter out = response.getWriter();
out.print("文件大小超过50kb");
return null;
}
if(!(filetype.equals("gif")||filetype.equals("jpg")))

{ request.setAttribute("msg", "文件必须是gif jpg类型");
return mapping.findForward("ok");
}
if(!(request.getParameter("check").equals(session.getAttribute("rand"))))
{
PrintWriter out = response.getWriter();
out.print("文件大小超过50kb");
request.setAttribute("msg", "验证码错误");
return mapping.findForward("fail");
}
try {
uploadFile.upload(dir, myFile);
per_resume.setPhoto("upload/"+uploadFile.upload(dir, myFile));//个人照片
if(addresume.addResume(per_resume)&&per_resume!=null)//添加简历
{
request.setAttribute("msg", "文件上传成功");
return mapping.findForward("ok");
}
else {
request.setAttribute("msg", "文件上传失败");
return mapping.findForward("fail");
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
request.setAttribute("msg", "文件上传失败");
return mapping.findForward("fail");
}


}
...全文
614 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zidasine 2009-04-10
  • 打赏
  • 举报
回复
看下64是哪行
可能filetype是null
或者request.getParameter("check")是null
在if里做个判断或者放到equals后面 ,equals前面放有具体值的
ohmydog1 2009-04-10
  • 打赏
  • 举报
回复
支持9楼,这么做上传太麻烦了,做成IFRAME 效果一样代码又简单
ke0825 2009-04-10
  • 打赏
  • 举报
回复
是不是用ajax 的话
我表单的数据 就不能从Actionform 里面去get()
必须通过客户端 传值
在Actionform 中通过request.getParameter("参数")
去 取得客户端传来的值
如果sendReq.send(null); 这样没有传递表单值的话

在Action中 就获取不到数据 就会出现 这 样的情况囝啊
严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at com.ditian.sjjy.struts.action.SaveResumeAction.execute(SaveResumeAction.java:64)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
believeyourself86 2009-04-10
  • 打赏
  • 举报
回复
你的参数可以在url地址后面放着,这样的话你也可以在action中用form接收即
sendReq.open("post","saveResume.do?method=***&id=***&name=***",true);
也可以将参数放到send方法中,即:
sendReq.send("name=***");
niuhuilin 2009-04-10
  • 打赏
  • 举报
回复
用jquery form 很好用的
小霍夫 2009-04-10
  • 打赏
  • 举报
回复
用jQuery(经常) 一个js的框架就很简单了...



代码如下..

jQuery.post("${pageContext.request.contextPath}/produce.do?action=loadOtherIdName",{prefix:"MP"},function(date){
jQuery("#otherId").val(date);
var v = date.substring(2,10);
jQuery("#mydate").val(v);
})


这里是整合了struts1.x
关于 .post方法里面的参数([param1] , <param2>,<param3>)
param1 是你发送给哪个action
prarm2 是你要传给action哪些参数 健 ,值的形式
param3 是回调函数 里面的date是action处理的结果 可以是json形式,or String

第在二,三个参数可有可无.


jQuery框架到我资源里有 ~


wangyetao601 2009-04-09
  • 打赏
  • 举报
回复
java.lang.NullPointerException
SaveResumeAction.java:64
这不是告诉这里有问题吗
ke0825 2009-04-09
  • 打赏
  • 举报
回复

现在调用到action,但抛出如下异常信息 不知道是怎么回事
2009-4-9 10:10:33 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at com.ditian.sjjy.struts.action.SaveResumeAction.execute(SaveResumeAction.java:64)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
wangyetao601 2009-04-09
  • 打赏
  • 举报
回复
没有调到action的原因有很多,先检查配置文件.xml,然后在看页面代码在触发js的时候是否真正调用到了,然后再检查能否进入到对应的action中。
请楼主考虑下出现问题的环节,定位准确。
wzju64676266 2009-04-09
  • 打赏
  • 举报
回复
sendReq.open("post","saveResume.do",true);//发送至saveResume.do
你这句话相当于重定向url跳转,action里面当然取不到值了,这不是提交表单
believeyourself86 2009-04-09
  • 打赏
  • 举报
回复
FormFile myFile=saveResumeForm.getPhoto();//获得上传的文件

这里面的FormFile里面的值如果不和客户端有联系的话,是什么地方给他赋得值呀?
believeyourself86 2009-04-09
  • 打赏
  • 举报
回复
直接调用action,在execute方法的开始获得的form里面的值是什么地方获得的?
Defonds 2009-04-09
  • 打赏
  • 举报
回复
AJAX上传比较费劲,如果想实现局部刷新上传文件的话,完全可以使用一个iframe
ke0825 2009-04-09
  • 打赏
  • 举报
回复
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
SaveResumeForm saveResumeForm = (SaveResumeForm) form;// TODO Auto-generated method stub
PersonalService addresume=new PersonalService();//实例化addresume服务层
Per_resume per_resume=new Per_resume();//获取持久化对象

/**************上传图片************/
FormFile myFile=saveResumeForm.getPhoto();//获得上传的文件
UploadFile uploadFile=new UploadFile();
String dir=request.getRealPath("/upload")+"/";
int filesize=myFile.getFileSize();//获取上传文件的大小
String filename=myFile.getFileName();
String filetype=filename.substring(filename.lastIndexOf(".")+1);//获取文件类型
//System.out.println("文件类型为:"+filetype);
HttpSession session=request.getSession();//得到一个session

if(filesize>50*1024)
{
request.setAttribute("msg", "文件大小超过50kb");
return mapping.findForward("ok");
}
if(!(filetype.equals("gif")||filetype.equals("jpg")))

{ request.setAttribute("msg", "文件必须是gif/jpg类型");
return mapping.findForward("ok");
}
if(!(request.getParameter("check").equals(session.getAttribute("rand"))))
{
request.setAttribute("msg", "验证码错误");
return mapping.findForward("fail");
}
try {
uploadFile.upload(dir, myFile);
per_resume.setPhoto("upload/"+uploadFile.upload(dir, myFile));//个人照片
per_resume.setName(saveResumeForm.getUserName());//姓名
per_resume.setAge(saveResumeForm.getAge());//年龄
per_resume.setSex(saveResumeForm.getSex());//性别
per_resume.setMajor(saveResumeForm.getMajor());//专业
per_resume.setEducation(saveResumeForm.getEducation());//学历
per_resume.setEmail(saveResumeForm.getEmail());//电子邮箱
per_resume.setQq(saveResumeForm.getQq());//QQ号码
per_resume.setTel(saveResumeForm.getPhone());//电话号码
per_resume.setJob_pay(Integer.parseInt(saveResumeForm.getPay()));//待遇
per_resume.setWork_summary(saveResumeForm.getWork());//工作资历
per_resume.setDeclaration(saveResumeForm.getDeclaraction());//就业宣言
if(addresume.addResume(per_resume)&&per_resume!=null)//添加简历
{
request.setAttribute("msg", "文件上传成功");
return mapping.findForward("ok");
}
else {
request.setAttribute("msg", "文件上传失败");
return mapping.findForward("fail");
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
request.setAttribute("msg", "文件上传失败");
return mapping.findForward("fail");
}




客服端不需要传值 我是直接调用这个action
}
believeyourself86 2009-04-09
  • 打赏
  • 举报
回复
var contentType = "application/x-www-form-urlencoded; charset=utf-8";
sendReq.open("post","saveResume.do",true);//发送至saveResume.do

sendReq.setRequestHeader("Content-Type", contentType);
sendReq.onreadystatechange=sendRequest;
sendReq.send(null);


在客户端你没有传递参数

但是在服务器端你利用 SaveResumeForm saveResumeForm = (SaveResumeForm) form;
来读取参数
一定是应为saveResumeForm是一个没有值的对象而报错的
johennes 2009-04-09
  • 打赏
  • 举报
回复
检查一下路径吧,可能路径有问题,也可能配置文件里没有配置这个.do
xjmcky 2009-04-09
  • 打赏
  • 举报
回复
SaveResumeAction的64行啊..那里的代码报异常了,,

你把你的Action代码贴出来看哈就知道了..
ke0825 2009-04-09
  • 打赏
  • 举报
回复
我知道啊。。根据上面提供的代码
各位大哥 帮我看看是怎么回事啊

解决下问题

81,076

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧