Tôi phải gửi tệp và thuộc tính của chúng đến máy chủ GWT.Gửi tệp và HashMap tới máy chủ trong GWT
Để gửi tệp, tôi đã sử dụng bảng biểu mẫu.
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;
}
}
tất cả các thuộc tính của tập tin này đang trong HashMap
có 2 hộp thoại Propertybox extends DialogBox
và
BrowseFile extends DialogBox
bên trong constructor của PropertyBox có BrowseFile
Khi PropertyBox hàm tạo
setSize("600px", "670px");
setHTML("Add Document");
setWidget(getVerticalPanel());
browseFile = new BrowseFile();
Các tài sản tùy chỉnh bên trong PropertyBox phụ thuộc vào lớp chọn (Class là cây Widget)
Mở Server Side
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);
}
Để Tạo một tài liệu trong kho lưu trữ bên ngoài tôi cần tài liệu về tài sản trong hasmap
folder.createDocument (Thuộc tính tài liệu, contentStream, VersioningState.MAJOR);
Thuộc tính tài liệu phải được gửi cho lớp này trên onClick
trường hợp Button ADD
của tài liệu bất động sản Lớp
***** Làm thế nào để gửi tài sản tài liệu này đến máy chủ trong lớp FileUpload *****
Có thể có thêm 200 thuộc tính. Và các thuộc tính này phụ thuộc vào lớp được chọn cho tài liệu. Và có hơn 50 lớp tài liệu. SO thêm hashMap như trường mẫu không phải là một lựa chọn tốt và cũng có giá trị một phần của hasmap là lớp có 3 biến (giá trị, kiểu dữ liệu). – NewCodeLearner
@NewCodeLearner Tôi không thấy lý do tại sao bạn không thể thêm trường biểu mẫu vào yêu cầu - sau khi tất cả, đó là dữ liệu nhiều phần và do đó nó có thể xử lý (gần như) số lượng trường không giới hạn. Và liệt kê trên HashMap.entrySet không phải là vấn đề lớn. Tôi có thể tư vấn để serialize HashMap vào một số dòng nhị phân và sau đó gửi nó như là dữ liệu thô - nhưng đây là kinda của hack và tôi đặt cược bạn không muốn điều này. Bạn tạo trường động cho từng loại tệp, sắp xếp chúng thành tập hợp các trường biểu mẫu trên máy khách và không đối sánh trên máy chủ, lấy HashMap cùng với tệp- và đó là nó. Có ý nghĩa? Nếu không - vui lòng giải thích, tại sao. – jdevelop
hey i am không vry tốt trong lập trình và có rất ít kiến thức về nó. Tôi sẽ cố gắng wat bạn đang nói. Sau đó, tôi sẽ cho bạn biết tôi muốn giống nhau hay không. Cảm ơn. – NewCodeLearner