Guys i've been trying to upload a file with some data comming from form fields but I had no luck, the servlet which I'm ussing is down here. As you can see afther the for is initialized an If is there, that if is working ok but the rest of condtional if are ignored and no data is retrieved or displayed(with the out.print) so I'm pasting here the servlet code in hope someone will see what afther hours and hours I couldn't see, please guys help me out with the issue.
import DAO.CuentaCobroDAO;
import DTO.CuentaCobroDTO;
import DTO.contratoDTO;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
*
* @author Leonardo
*/
public class CuentaCobroCtrol extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, FileUploadException, ParseException, SQLException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
CuentaCobroDAO ccdao= new CuentaCobroDAO();
CuentaCobroDTO cdto= new CuentaCobroDTO();
contratoDTO con= new contratoDTO();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
FileItemFactory fif= new DiskFileItemFactory();
ServletFileUpload sfu= new ServletFileUpload(fif);
String fechai="", fechaf="";
String contrato, dias=null;
String valor, arl=null, eps=null, pension=null;
List items=sfu.parseRequest(request);
java.sql.Date fi, ff, factual;
Date fechaActual;
try{
for (int i = 0; i < items.size(); i++) {
FileItem item = (FileItem) items.get(i);
if(item.isFormField()){
if(item.getFieldName().equals("fechai")){
fechai=obtenerDatoDeFormulario(item.getInputStream());
out.print(fechai);
}
if(item.getFieldName().equals("fechaf")){
fechaf=obtenerDatoDeFormulario(item.getInputStream());
out.print("FECHAF"+fechaf);
}
if(item.getFieldName().equals("numcont")){
contrato=obtenerDatoDeFormulario(item.getInputStream());
out.print("CONTRATO"+contrato);
}
if(item.getFieldName().equals("dias")){
dias=obtenerDatoDeFormulario(item.getInputStream());
out.println(dias);
}
if(item.getFieldName().equals("valor")){
valor=obtenerDatoDeFormulario(item.getInputStream());
out.print(valor);
}
if(item.getFieldName().equals("arl")){
arl=obtenerDatoDeFormulario(item.getInputStream());
out.println("Por ARL:"+arl);
}
if(item.getFieldName().equals("eps")){
eps=obtenerDatoDeFormulario(item.getInputStream());
out.println("Por EPS:"+eps);
}
if(item.getFieldName().equals("pension")){
pension=obtenerDatoDeFormulario(item.getInputStream());
out.println("Por PENSION:"+pension);
}
out.print("El valor 2 de fecha I es:"+fechai);
}
/* A continuación validamos que los campos que vienen del formulario no estén vacios, esto en caso de que javascript falle,
así garantizamos que tenemos todos los datos; hago esto antes de escribir el archivo en el servidor para evitar que se suba
información que está incompleta y no debe ser subida sino hasta que se compruebe que se tienen todos los datos.*/
out.print("El valor 3 de fechai es:"+fechai+"el de final es:"+fechaf);
fechaActual= new Date();
Date inicial=formatter.parse(fechai);
fi= new java.sql.Date(inicial.getTime());
Date ffinal=formatter.parse(fechaf);
ff= new java.sql.Date(ffinal.getTime());
factual=new java.sql.Date(fechaActual.getTime());
out.print("El valor 4:"+fechai+"Y el de final es:"+fechaf);
if(fi.compareTo(factual)>0 || ff.compareTo(factual)>0){
response.sendRedirect("nomina/cuentacobro.jsp?msg="+"Error, no puedes ingresar una cuenta del mes futuro o actual");
break;
}else if(dias!=null){
response.sendRedirect("nomina/cuentacobro.jsp?msg= Debes ingresar los días trabajados");
break;
}else if(30<Integer.parseInt(dias)){
response.sendRedirect("nomina/cuentacobro.jsp?msg= En el mes pueden ser máximo 30 días");
break;
}else if(arl==null){
response.sendRedirect("nomina/cuentacobro.jsp?msg= Tienes que ingresar el valor de la ARL");
break;
}else if(eps==null){
response.sendRedirect("nomina/cuentacobro.jsp?msg= Es necesario ingresar el valor de la EPS");
break;
}else if(pension==null){
response.sendRedirect("nomina/cuentacobro.jsp?msg= Debes ingresar el valor de pensión");
break;
}else{
String ruta="/archivos/pdf/"+request.getSession(false).getAttribute("iduser")+"/";
String nombreArchivo=request.getSession(false).getAttribute("iduser")+"-"+factual;
if(!item.isFormField()){
File archivoAServidor= new File(getServletContext().getRealPath(ruta+nombreArchivo));
try {
item.write(archivoAServidor);
} catch (Exception ex) {
Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex);
}
}
cdto.setFinicial(fi);
cdto.setFfinal(ff);
cdto.setDias(Integer.parseInt(request.getParameter("dias")));
cdto.setHoras(Integer.parseInt(request.getParameter("horas")));
cdto.setPagoArl(Integer.parseInt(request.getParameter("arl")));
cdto.setPagoEps(Integer.parseInt(request.getParameter("eps")));
cdto.setPagoPension(Integer.parseInt(request.getParameter("pension")));
cdto.setIdContratista((Integer)request.getSession(false).getAttribute("iduser"));
cdto.setValorAPagar(Integer.parseInt(request.getParameter("valor")));
con.setIdCONTRATO((Integer)request.getSession(false).getAttribute("idContrato"));
cdto.setRutaDocumento(ruta+nombreArchivo);
String salida=cdto.insertCuenta(cdto, con);
response.sendRedirect("nomina/cuentacobro.jsp?msg="+salida);
}
}
}catch(IOException iex){
throw iex;
}catch(ParseException pex){
throw pex;
}
try {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet CuentaCobroCtrol</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet CuentaCobroCtrol at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
private static String obtenerDatoDeFormulario(InputStream is){
BufferedReader br=null;
StringBuilder sb= new StringBuilder();
String linea;
try {
br= new BufferedReader(new InputStreamReader(is));
while((linea=br.readLine())!= null){
sb.append(linea);
}
} catch (IOException ex) {
ex.printStackTrace();
} finally{
if(br!=null){
try {
br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
return sb.toString();
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (FileUploadException ex) {
Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex);
} catch (ParseException ex) {
Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (FileUploadException ex) {
Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex);
} catch (ParseException ex) {
Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
PD: The out.print are used to show the informatión gathered from the fiel but after the first If is processed then the others are just ignored.