Je dois envoyer le fichier et leurs propriétés au serveur GWT.Envoyer le fichier et HashMap au serveur dans GWT
Pour envoyer un fichier j'ai utilisé le panneau de formulaire.
public class BrowseFile extends DialogBox {
// more code
// ..
private FormPanel getFormPanel() {
if (formPanel == null) {
formPanel = new FormPanel();
formPanel.setMethod(FormPanel.METHOD_POST);
formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
formPanel.setAction(GWT.getHostPageBaseURL() +"UploadFileServlet");
formPanel.addSubmitHandler(new FormPanel.SubmitHandler(){
public void onSubmit(SubmitEvent event) {
// TODO Auto-generated method stub
setFilename(fileUpload.getFilename());
}
});
}
return formPanel;
}
}
toutes les propriétés de ce fichier sont hashmap
il y a 2 boîte de dialogue Propertybox extends DialogBox
et
BrowseFile extends DialogBox
dans le constructeur de PropertyBox il y a BrowseFile
Lorsque PropertyBox constructeur
setSize("600px", "670px");
setHTML("Add Document");
setWidget(getVerticalPanel());
browseFile = new BrowseFile();
la propriété personnalisée à l'intérieur du PropertyBox dépend de la classe choisie (classe Tree Widget)
côté serveur
public class FileUpload extends HttpServlet implements Servlet{
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(FileUpload.class
.getName());
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
byte[] buffer = new byte[115200];//
String fileName = null;
String mimetype = null;
String majorVersion = null;
InputStream stream = null;
try {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext()) {
FileItemStream item = iterator.next();
stream = item.openStream();
if (item.isFormField()) {
//
} else {
fileName = item.getName();
mimetype = item.getContentType();
//
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ByteArrayOutputStream output = new ByteArrayOutputStream();
int len;
while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
output.write(buffer, 0, len);
}
ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());
Session session =RootFolder.getSession();
ContentStream contentStream = session.getObjectFactory()
.createContentStream(fileName, output.size(), mimetype, input);
}
Pour Création d'un document dans le référentiel externe i besoin du document Propriété en hasmap
folder.createDocument (propriété de document, contentStream, VersioningState.MAJOR);
La propriété de document doit être envoyé à cette classe en cas de onClick
Button ADD
de la propriété Classe de document
***** Comment envoyer ce document propriété au serveur en classe FileUpload *****
Il peut y avoir plus de 200 propriétés. Et ces propriétés dépendent de la classe sélectionnée pour le document. Il existe plus de 50 classes de document. L'ajout de hashMap comme champ de formulaire n'est pas une bonne option et la valeur de hasmap est la classe qui a 3 variables (value, dataType). – NewCodeLearner
@NewCodeLearner Je ne vois pas pourquoi vous ne pouvez pas ajouter des champs de formulaire à la demande - après tout, c'est des données en plusieurs parties et donc il peut gérer un nombre (presque) illimité de champs. Et l'énumération dans HashMap.entrySet n'est pas si grave. Je pourrais conseiller de sérialiser HashMap dans un flux binaire, puis de l'envoyer en tant que données brutes - mais c'est un peu hack et je parie que vous ne le voulez pas. Vous créez des champs dynamiquement pour chaque type de fichier, les marshal dans l'ensemble des champs de formulaire sur le client et unmarshal sur le serveur, obtenir la HashMap ensemble avec le fichier et c'est tout. Logique? Si non, veuillez expliquer pourquoi. – jdevelop
hey je ne suis pas très bon en programmation et en ai très peu connaissance. Je vais essayer wat vous dites. Ensuite, je vais vous faire savoir que je veux la même chose ou pas. Merci. – NewCodeLearner