user2685033
user2685033

Reputation: 1

Why no files found using file uploading in Struts 2

I am using org.apache.commons.*, org.apache.commons.disk.*, org.apache.commons.fileupload.servlet.* packages for file uploading in JSP program and there was no need of Struts and it was working great, data easily worked with this, but when I added Struts 2 core libraries into my web project using MyEclipse 8.5 it is not working and have no fields found. May be the program is with upload.parseRequest. Frankly, I am unable to understand the problem, so I share my program too

AddCategory.jsp:

<html>
<head>
  <meta http-equiv="refresh" content="30">
</head>

<script type="text/javascript">
  function blank() {


    if (document.cate.cat.value == "Enter New Category") {
      alert(" Category must not be blanked !!!");
      document.cate.cat.focus();
      return false;
    }
    else if (!document.getElementById("file1").value) {
      alert("No file selected");
      return false;
    }
    else {
      return true;
    }
  }

</script>
<form name="cate" action="CategoryAdded.jsp" method="post" enctype="multipart/form-data" onsubmit="return blank()">
  <table width="100%" border="0">
    <tr>
      <th colspan="2" scope="col">
        <div align="center">Create New Category</div>
      </th>
    </tr>
    <tr>
      <td width="50%">
        <div align="right">Enter New Category:</div>
      </td>
      <td width="50%">
        <input name="cat" type="text" id="cat" value="Enter New Category"
               onFocus="if(this.value== 'Enter New Category'){   this.value='' ; this.style.background='white';}"
               onBlur="if(this.value==''){this.value='Enter New Category';  this.style.background='lightyellow'}">
      </td>
    </tr>

    <tr>
      <td width="50%">
        <div align="right">Upload photo:</div>
      </td>
      <td width="50%"><input name="file1" type="file" id="file1"></td>
    </tr>


    <tr>
      <td colspan="2">
        <div align="center">
          <input type="submit" name="Submit" value="Add Category">
        </div>
      </td>
    </tr>
  </table>
</form>
</html>

    

CategoryAdded.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<%@page import="java.io.*" %>
<%@ page language="java" errorPage="" %>
<%@ page import="java.sql.*" %>
<%@ page import="org.apache.commons.io.*" %>
<%@page import="java.util.Iterator,java.util.List" %>
<%@page import="org.apache.commons.*,org.apache.commons.fileupload.disk.*,org.apache.commons.fileupload.servlet.*" %>
<%@ page import="java.util.*" %>
<%@page import="org.apache.commons.fileupload.FileItemFactory" %>
<%@page import="org.apache.commons.fileupload.FileItem" %>
<%@page import="org.apache.commons.fileupload.FileUploadException" %>
<%@page import="p1.DBInfo" %>
<%@page import="p1.Identy" %>
<%
  String path = request.getContextPath();
  String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<%
  String pname = "";
  Identy id = new Identy();
  String cod = id.code();

  boolean isMultipartContent = ServletFileUpload.isMultipartContent(request);
  if (!isMultipartContent) {
    System.out.println("No multipart found");
    return;
  }


  FileItemFactory factory = new DiskFileItemFactory();
  ServletFileUpload upload = new ServletFileUpload(factory);
  try {
    List<FileItem> fields = upload.parseRequest(request);
    Iterator<FileItem> it = fields.iterator();

    if (!it.hasNext()) {
      System.out.println("No fields     found");
      return;
    }


    DBInfo obj = new DBInfo();
    Connection cn = obj.getConn();
    PreparedStatement ps = cn.prepareStatement("insert into category values(?,?,?)");

    while (it.hasNext()) {

      FileItem fileItem = it.next();

      if (fileItem.getFieldName().equals("cat")) {
        pname = fileItem.getString();
        System.out.println("category name is " + pname);
      }

      boolean isFormField = fileItem.isFormField();

      if (!isFormField) {
        String s = fileItem.getName().substring(fileItem.getName().lastIndexOf("\\") + 1);

        fileItem.write(new File("D:\\Practice\\ShoppingCart\\WebRoot\\images\\" + s));
        System.out.println(s);
        fileItem.getOutputStream().close();

        ps.setString(3, "D:\\Practice\\ShoppingCart\\WebRoot\\images\\" + s);
      }
    }

    ps.setString(1, pname);
    ps.setString(2, pname + cod);

    int i = ps.executeUpdate();

    if (i == 1) {
%>
<head>


  <script type="text/javascript">
    function myFunction() {


      var r = confirm("New Category Added Successfully!!!\nIf you Want to Add more New Category then Press Ok!!!");
      if (r == true) {

        window.location = "AddCategory.jsp";


      }
      else {
        window.location = "Tryy.jsp";
      }

    }
  </script>


</head>

<body onload="myFunction()">
</body>

<%
    }
    cn.close();

  } catch (Exception e) {
    e.printStackTrace();
  }
%>
</html>

Upvotes: -2

Views: 319

Answers (1)

Roman C
Roman C

Reputation: 1

The best thing is to rewrite the JSPs to remove scriptlets and move business logic to the action classes.

You could also use Struts2 <s:if> and <s:else> tags to render content conditionally.

The commons-fileUpload is the default implementation for uploading files in Struts2, to use it correctly you could run an example Struts2 project like struts-2-upload-multiple-files-example.

Upvotes: 0

Related Questions