[Débutant] Passage d'input/hidden vers ma Servlet (multipart/form-data)
Bonjour,
aujourd'hui un nouveau problème se pose pour moi. Un collègue m'a donné le moyen d'uploader un fichier. Pour cela j'utilise dans ma form :
Code:
enctype="multipart/form-data"
Le problème avec ce type est que je n'arrive plus à récupérer dans ma servlet les éléments qui sont en hidden dans ma JSP tels que :
Code:
1 2
| <td><input type="hidden" value="<%=mode %>" name="txtMode"></td>
<td><input type="hidden" value="<%=path %>" name="txtPath"></td> |
Cela me renvoie la valeur null quand je fais dans ma servlet :
Code:
1 2
| String path = request.getParameter("txtPath");
String mode= request.getParameter("txtMode"); |
Je sais que cela vient d'un problème de sérialisation si j'ai bien compris ce que j'ai trouvé sur le net mais je ne trouve pas comment résoudre mon problème. Pour mes autres input de type "text", je récupère bien les valeurs.
Je vous mets ci-dessous ma page JSP et ma servlet.
Merci beaucoup.
Ma page JSP :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| <%@ page language="Java" import="servlet.*" %>
<%
// on récupère les données nom, age et urlRetour nécessaire à l'affichage de la page
String mode =(String)request.getParameter("txtMode");
String id=(String)request.getParameter("txtId");
String iduser=(String)request.getParameter("txtIdUser");
String user=(String)request.getParameter("txtUser");
String libelle=(String)request.getParameter("txtLibelle");
String fichier=(String)request.getParameter("txtFichier");
String datecreation = request.getParameter("txtDateCreation");
String path = request.getParameter("txtPath");
user = ServletAbonne.searchUserFromID(Integer.parseInt(iduser));
path = (String)application.getRealPath("/");
%>
<html>
<head>
<title>Intranet Rennes Ausy</title>
<LINK REL="StyleSheet" HREF="./../CSS/styles.css" TYPE="text/css">
</head>
<body>
<%
String repass = request.getParameter("alreadypassed");
%>
<%
if (repass != null) {
out.print ("<p align=\"center\">Veuillez remplir le champ Libellé et Sélectionnez un fichier !</p>");
}
%>
<center>
<h2>Fiche du document administratif</h2>
<hr>
<form action="<%=request.getContextPath()+"/ServletDocAdmin"%>" method="post" name="frm" enctype="multipart/form-data">
<table>
<tr>
<tr>
<td>Date de création</td>
<td><input name="txtDateCreation" value="<%=datecreation%>" type="text" size="20" readonly></td>
</tr>
<tr>
<td>User</td>
<td><input name="txtUser" value="<%=user%>" type="text" size="20" readonly></td>
</tr>
<tr>
<td>Libelle*</td>
<td><input name="txtLibelle" value="<%=libelle%>" type="text" size="20"></td>
</tr>
<tr>
<td>Fichier*</td>
<td><input name="txtFichier" value="" type="file" size="40"></td>
</tr>
<tr></tr>
<tr>
<td>* Champs obligatoires</td>
</tr>
</table>
<table>
<tr>
<td><input type="hidden" value="<%=mode %>" name="txtMode"></td>
<td><input type="hidden" value="<%=path %>" name="txtPath"></td>
<td><input type="hidden" value="<%=id %>" name="txtId"></td>
<td><input type="hidden" value="<%=iduser %>" name="txtIdUser"></td>
<td><input type="hidden" value="0" name="alreadypassed"></td>
<td><input type="submit" value="Sauvegarder le document administratif"></td>
<td><input type="submit" value="Supprimer le document administratif" onclick="document.frm.txtMode.value='3'"></td>
</tr>
</table>
</form>
</center>
</body>
</html> |
La fonction doPost de ma servlet :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
| public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
boolean isMultipart = FileUpload.isMultipartContent(request);
int retour = 3;
File fullFile = null;
File savedFile = null;
FileItem item = null;
DocAdmin docAdmin = null;
String libelle = "";
Integer iduser = -1;
Integer id = -1;
String descriptif_filename = "";
//String mode = "";
String path = request.getParameter("txtPath");
String mode= request.getParameter("txtMode");
System.out.println("-------> Mode :"+mode+"\n-------> Path :"+path);
if(!isMultipart){
System.out.println("pas multipart !!!");
// request.getRequestDispatcher("msg.jsp").forward(request, response);
// return;
}
else
{
try
{
DiskFileUpload upload = new DiskFileUpload();
upload.setSizeMax(10000000);// 10 Mo
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while(itr.hasNext())
{
//Object o_item = itr.next();
item = (FileItem) itr.next();
if(item.isFormField())
{
String fieldName = item.getFieldName();
System.out.println("--------------> Voici le champ : "+fieldName);
if(fieldName.equals("txtLibelle"))
{
libelle = item.getString();
if (!libelle.equals(""))
{
System.out.println("Libellé = "+libelle);
}
}
else if(fieldName.equals("txtDateCreation"))
System.out.println("date = "+item.getString());
else if (fieldName.equals("txtIdUser"))
{
iduser = Integer.parseInt(item.getString());
if (iduser != -1)
{
System.out.println("Id User ="+ iduser);
}
} else if (fieldName.equals("txtMode")) {
mode = item.getString();
if (!mode.equals(""))
{
System.out.println("Mode = "+mode);
}
} else if (fieldName.equals("txtId")) {
id = Integer.parseInt(item.getString());
if (id != -1)
{
System.out.println("Id du document = "+id);
}
}
}
else
{
if (item != null)
if (item.getName() != null && !item.getName().equals(""))
{
//descriptif_filename = item.getName();
System.out.println("nom du fichier : "+item.getName());
fullFile = new File(item.getName());
System.out.println(path+"download/");
savedFile = new File(path+"download/", fullFile.getName());
descriptif_filename = savedFile.getAbsolutePath();
item.write(savedFile);
}
}
}
if (mode.equals("3")) {
// Suppression du document
Transaction tx = session.beginTransaction();
DocAdmin DocAdmin = (DocAdmin) session.load(DocAdmin.class, new Integer(id));
v.removeElement(DocAdmin);
session.delete(DocAdmin);
session.flush();
tx.commit();//
System.out.println("Le document administratif est supprimé !");
getServletContext().getRequestDispatcher("/JSP/DocAdmin.jsp").forward(request,response);
} else {
// vérification des données obligatoires
if (!libelle.equals("") && !(descriptif_filename.equals("")))
{
Transaction tx = session.beginTransaction();
if (mode.equals("2")) {
// On modifie l'DocAdmin
docAdmin = (DocAdmin) session.load(DocAdmin.class, new Integer(id));
int index = v.indexOf(docAdmin);
docAdmin.setAbonneIdent(iduser);
docAdmin.setDocumentAdminLibelle(libelle);
docAdmin.setDocumentAdminFichier(descriptif_filename);
v.setElementAt(docAdmin,index);
session.save(docAdmin);
} else if (mode.equals("1")) {
// On ajoute le nouvel DocAdmin
docAdmin = new DocAdmin();
docAdmin.setAbonneIdent(iduser);
docAdmin.setDocumentAdminLibelle(libelle);
docAdmin.setDocumentAdminFichier(descriptif_filename);
Date d = new Date();
docAdmin.setDocumentAdminDatecreation(d);
v.addElement(docAdmin);
session.save(docAdmin);
} else {
// ERROR
}
session.flush();
tx.commit();
System.out.println("result commit : " + tx.wasCommitted());
System.out.println("Le document administratif est bien enregistré");
getServletContext().getRequestDispatcher("/JSP/DocAdmin.jsp").forward(request,response);
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
} |