【问题标题】:How to solve No result defined for action and result input error?如何解决 No result defined for action 和 result 输入错误?
【发布时间】:2014-10-08 13:20:58
【问题描述】:

您好,我想在服务器上上传多个文件,例如一个 excel 和两个 xml 文件,但没有为操作定义结果,并且正在显示结果输入错误。我正在使用 struts2 框架。

我的 Jsp 页面-

<form action ="myInput" enctype="multipart/form-data" method="post" >
<input type="file" name="fileUpload[]" />
<input type="file" name="fileUpload[]" />
<input type="file" name="fileUpload[]" />
<input  type="submit" value="Upload Records" />
</form>

我的 struts.xml-

<package name="links" extends="struts-default, json-default" namespace="/">
<action name="myInput" class="com.action.MyAction" >  
        <interceptor-ref name="linksAccessRequired"/>

        <interceptor-ref name="fileUpload">
            <param name="allowedTypes">*/*</param>
            <param name="maximumSize">10485760</param> <!-- 10MB -->
        </interceptor-ref>
        <interceptor-ref name="defaultStack" />

        <result name="success" type="json"/>
        <result name="login" type="redirect">/</result>  
     </action>
 </package>

我的动作文件-

      import com.opensymphony.xwork2.Action;
      import com.opensymphony.xwork2.ActionSupport;

      import java.io.File;
      import java.io.IOException;

      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpSession;

      import org.apache.commons.io.FileUtils;
      import org.apache.struts2.interceptor.ServletRequestAware;

     public class MyAction extends ActionSupport implements ServletRequestAware {
/**
 * 
 */
private static final long serialVersionUID = 1L;
private boolean result = false;
private String status = null;
private String msg = null;

HttpServletRequest request = null;

private File[] fileUpload;
private String[] fileUploadFileName;
private String[] fileUploadContentType;

public File[] getFileUpload() {
    return fileUpload;
}

public void setFileUpload(File[] fileUploads) {
    this.fileUpload = fileUploads;
}

public String[] getFileUploadFileName() {
    return fileUploadFileName;
}

public void setFileUploadFileName(String[] fileUploadFileNames) {
    this.fileUploadFileName = fileUploadFileNames;
}

public String[] getFileUploadContentType() {
    return fileUploadContentType;
}

public void setFileUploadContentType(String[] fileUploadContentTypes) {
    this.fileUploadContentType = fileUploadContentTypes;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}

public String execute() {
    System.out.println("Something");
    String saveDirectory = "/mypath/excels/Output/"+request.getSession().getAttribute("my")+"/myOut/";
   if(this.doUpload(fileUpload, saveDirectory))
   {
       this.setStatus("Success");
       this.setMsg("Files have been upload successfully !");
   }
   else
   {
       this.setStatus("Failled");
       this.setMsg("Files have not been upload successfully !");
   }
   return Action.SUCCESS;
}
public boolean doUpload(File[] fileUpload, String saveDirectory) {

    // copy the uploaded files into pre-configured location
    for (int i = 0; i < fileUpload.length; i++) {
        File uploadedFile = fileUpload[i];
        String fileName = fileUploadFileName[i];
        File destFile = new File(saveDirectory + File.separator + fileName);
        try {
            FileUtils.copyFile(uploadedFile, destFile);
        } catch (IOException ex) {
            System.out.println("Could not copy file " + fileName);
            ex.printStackTrace();
        }
    }
    return true;
}

@Override
public void setServletRequest(HttpServletRequest request) {
    this.request = request;
}

}

为什么我得到 No result defined for action 和 result input 错误? 请建议我解决这个问题。 谢谢

【问题讨论】:

  • 添加一个input 结果并在该页面上显示一条错误消息,您就会明白原因。
  • @Aleksandr M,添加输入结果后仍然存在错误。
  • 如果您添加了input 结果,则错误应该不同。当然,真正的原因在于其他原因,但在您关注我的第一条评论后您会看到。

标签: java file-upload struts2 multifile-uploader


【解决方案1】:
  1. 首先阅读how INPUT result works,并在您的操作配置中正确添加一个;

  2. 然后阅读how to upload multiple files in Struts2;

  3. 此时,您应该可以自己发现错误,即:

    <form action="myInput" enctype="multipart/form-data" method="post" >
        <input type="file" name="fileUpload[]" />
        <input type="file" name="fileUpload[]" />
        <input type="file" name="fileUpload[]" />
        <input type="submit" value="Upload Records" />
    </form>
    

    应该是这样的:

    <form action="myInput" enctype="multipart/form-data" method="post" >
        <input type="file" name="fileUpload[0]" />
        <input type="file" name="fileUpload[1]" />
        <input type="file" name="fileUpload[2]" />
        <input type="submit" value="Upload Records" />
    </form>
    

    甚至更好:

    <form action="myInput" enctype="multipart/form-data" method="post" >
        <input type="file" name="fileUpload" multiple />
        <input type="submit" value="Upload Records" />
    </form>
    

    使用 Struts 标签将是:

    <s:form action="myInput" enctype="multipart/form-data" method="post" >
        <s:file name="fileUpload" multiple />
        <s:submit value="Upload Records" />
    </s:form>
    

附注:如果您有兴趣了解如何使用 dropzone.js 在 Struts2 中执行多次上传,this may be worth reading

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    相关资源
    最近更新 更多