解决struts2和jquery AjaxForm上传图片不能返回Json的有关问题

解决struts2和jquery AjaxForm上传图片不能返回Json的问题

解决struts2jquery AjaxForm上传图片不能返回Json的问题
 情况一:能上传,但是会报如下错误,而且返回不了
JSON值:

Js:

$("#filesubmit").click(function () {

                  if ($("#inputfile").val() == "") {

                      alert("请选择一个图片文件");

                     return;

                 }

                 alert("ok");

                 $("#fileUpload").ajaxSubmit({

                  //url:"fileUpload", 

                      //type:"post", 

                      //enctype:'multipart/form-data', 

                       //iframe: true, 

                  dataType:"json",

                     success: function (data, status) {

                     //if()

                         alert(data);

                         alert(data.myFilefileName);

                         //var imgpath="UploadImages/"+data.myFilefileName;

                         var imgpath="../UploadImages/"+data.myFilefileName;

                         alert(imgpath);

                         $(".jcrop-preview").attr('src', imgpath);

                         //$("#target").removeAttr('src');

                        $("#target").attr('src', imgpath);

                        // alert($("#target").attr('src'));

                        $("#srcimg").val( data.myFilefileName);

                        $(".jcrop-holder img").attr('src', imgpath);

                     }

                 });

             });

Action片段:

publicclass ImgUploadAction extends MySuperAction{  

    privatestaticfinallongserialVersionUID = 572146812454l; 

    privatestaticfinalintBUFFER_SIZE = 16 * 1024; 

    public OperateImage imgoper=new OperateImage();

    private File myFile;

    private String myFilecontentType; 

    private String myFilefileName;  

    private String imageFileName; 

    private String caption;

Struts.xml:

<package name="ajaxDemo" extends="json-default">

    <action name="fileUpload" class="action.ImgUploadAction" method="uploadPic">   

       <interceptor-ref name="fileUploadStack" />

       <interceptor-ref name="fileUpload">

                <param name="allowedTypes">

                    image/bmp,image/png,image/gif,image/jpeg,image/jpg

                </param>

                <param name="maximumSize">4194304</param>

         </interceptor-ref>    

       <result type="json"></result>  

    </action> 

    <action name="cutPic" class="action.ImgUploadAction" method="cutPic"> 

    <result  type="redirect">/page/altpho.jsp</result> 

    </action>

    <action name="zhuce" class="action.UserAction"  method="zhuceCheck">

    <result type="json"></result>

    </action>

    <action name="setRelationship" class="action.RelationAjaxAction">

    <result type="json"></result>

    </action>

</package>   

十二月 05, 2013 10:41:37 下午 org.apache.struts2.dispatcher.Dispatcher warn

WARNING: Could not find action or result

There is no Action mapped for action name undefined. - [unknown location]

    at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)

    at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)

    at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)

    at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)

    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:553)

    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)

    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)

    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)

    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)

    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

    at java.lang.Thread.run(Thread.java:722)

 

十二月 05, 2013 10:41:37 下午 org.apache.struts2.dispatcher.Dispatcher error

SEVERE: Exception occurred during processing request: There is no Action mapped for action name undefined.

There is no Action mapped for action name undefined. - [unknown location]

    at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)

    at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)

    at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)

    at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)

    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:553)

    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)

    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)

    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)

    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)

    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

    at java.lang.Thread.run(Thread.java:722)

 

情况二:注释掉dataType:”json”,后不报异常,但是返回的看似Json,但不可用

解决struts2和jquery AjaxForm上传图片不能返回Json的有关问题

 

解决struts2和jquery AjaxForm上传图片不能返回Json的有关问题解决struts2和jquery AjaxForm上传图片不能返回Json的有关问题

还有其他各种状况,多得都忘了,下面是解决方法(花了我好几天的时间,走了不少弯路,最终还是行了啊  >_< 

Struts.xml:

<struts> 

<constant name="struts.multipart.saveDir" value="/temp"></constant>

<constant name="struts.multipart.maxSize" value="1024102400"/>

<constant name="struts.multipart.maxSize" value="9000000"/>

<package name="example" namespace="" extends="struts-default">

<action name="fileUpload" class="action.ImgUploadAction" method="uploadPic">   

       <interceptor-ref name="fileUploadStack" />

       <interceptor-ref name="fileUpload">

                <param name="allowedTypes">

                    image/bmp,image/png,image/gif,image/jpeg,image/jpg

                </param>

                <param name="maximumSize">4194304</param>

         </interceptor-ref>    

       <result name="success">/page/test.jsp </result>  

    </action> 

   

    <action name="cutPic" class="action.ImgUploadAction" method="cutPic"> 

    <result  type="redirect">/page/altpho.jsp</result> 

    </action>

</package>

</struts>

Test.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

     <%

     //jsp用于解决struts2jquery AjaxForm上传图片不能返回Json的问题,

     //altpho.jsp异步提交到ImgUploadAction中,再return success/error到此页面中

     //在此页面获取Action中的值,制作成Json,就能在altpho.jsp中获取

        //System.out.println("有执行2"+request.getParameter("myFilefileName"));

        response.setContentType("text/html;charaset=utf-8");

        //System.out.println("有执行3");  response.getWriter().write("{\"myFilefileName\":\""+session.getAttribute("imageFileName")+"\"}");

       System.out.println(session.getAttribute("imageFileName"));

       //System.out.println("有执行4");

       //response.sendRedirect("altpho.jsp");

    %>

Js:

 解决struts2和jquery AjaxForm上传图片不能返回Json的有关问题

Action:

解决struts2和jquery AjaxForm上传图片不能返回Json的有关问题

Alert(data);

解决struts2和jquery AjaxForm上传图片不能返回Json的有关问题

Alert(data.myFilefileName);

解决struts2和jquery AjaxForm上传图片不能返回Json的有关问题

不知你们是怎么解决的,愿意的话贴贴你们解决的方法