Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    MultiFileUpload sample & JavaScript issues

    SmartClient Version: SC_SNAPSHOT-2011-08-02/LGPL Development Only (built 2011-08-02)

    SmartGWT 2.5 & Any Browser

    My first post and a question to this forum

    Here is an implementation of a MultiFileUpload that I had done. This could be an implementation that can be used by my fellow SmartGWT developers. This is just an improvement over an existing implementation presented in this forum.
    Code:
    public class FileUploadScreen extends Canvas {
    	public static enum Mode {SIMPLE, COMPLEX}
    	
    	public static final String TARGET="uploadTarget";
    	public static final int COUNT_OF_UPLOAD_ITEMS = 5;
    
    	private FileUploadListener listener;
    	private List<HiddenItem> hiddenItems;
    	DynamicForm[] uploadForms;
    	UploadItem[] fileItems;
    	NamedFrame[] frames; 	
    	TextItem[] progressMessages;
    	final Button uploadButton;
    
    	/**
    	 * 
    	 */
    	public FileUploadScreen() {
    		this(null,Mode.SIMPLE);
    	}
    	
    	/**
    	 * @wbp.parser.constructor
    	 */
    	public FileUploadScreen(Map<String,String> args,Mode mode) {
    		
    		currentVisibleUploadItemNumber = 0;
    		initComplete(this);
    		final List<FormItem> items = new ArrayList<FormItem>();
    		if (args != null) {
    			hiddenItems = new ArrayList<HiddenItem>();
    			for(String key: args.keySet()) {
    				HiddenItem item = new HiddenItem(key);
    				item.setValue(args.get(key));
    				items.add(item);
    				hiddenItems.add(item);
    			}
    		}
    		ValuesManager vm = new ValuesManager();
    		uploadForms = new DynamicForm[COUNT_OF_UPLOAD_ITEMS];
    		fileItems = new UploadItem[COUNT_OF_UPLOAD_ITEMS];
    		progressMessages = new TextItem[COUNT_OF_UPLOAD_ITEMS];
    		frames = new NamedFrame[COUNT_OF_UPLOAD_ITEMS];
    		
    		for (int i = 0; i < COUNT_OF_UPLOAD_ITEMS; i++) {
    			//create a new form
    			uploadForms[i] = new DynamicForm();
    			uploadForms[i].setWidth("33px");
    			uploadForms[i].setValuesManager(vm);
    			uploadForms[i].setEncoding(Encoding.MULTIPART);
    			uploadForms[i].setTarget(TARGET + i);
    			uploadForms[i].setAction(URL");
    			//create new upload item
    			fileItems[i] = new UploadItem("File" + (i+1));
    			fileItems[i].setTitle("File" + (i+1));
    			fileItems[i].setWidth(300);
    			//add upload-item to form
    			//progress messages
    			progressMessages[i] = new TextItem("Text" + (i+1));
    			progressMessages[i].setTitle("Upload Status: ");
    			progressMessages[i].setValue("Not Uploaded");
    			//set Items
    			uploadForms[i].setItems(fileItems[i], progressMessages[i]);
    			//hide all except 1st form
    			if(i!=0) uploadForms[i].setVisible(false);
    		}
    		
    		HLayout addRemoveButtonLayout = new HLayout(10);
    		
    		Button minusButton = new Button("-");
    		minusButton.addClickHandler(new ClickHandler(){
    			public void onClick(ClickEvent e) {
    				if(currentVisibleUploadItemNumber != 0){
    					uploadForms[currentVisibleUploadItemNumber].hide();
    					currentVisibleUploadItemNumber--;
    				}
    			}
    		});
    		
    		Button plusButton = new Button("+");
    		plusButton.addClickHandler(new ClickHandler(){
    			public void onClick(ClickEvent e) {
    				if(currentVisibleUploadItemNumber < (COUNT_OF_UPLOAD_ITEMS-1)){
    					currentVisibleUploadItemNumber++;
    					uploadForms[currentVisibleUploadItemNumber].show();
    				}
    			}
    		});
    
    		addRemoveButtonLayout.addMember(minusButton);
    		addRemoveButtonLayout.addMember(plusButton);
    		addRemoveButtonLayout.setHeight("1");
    		
    		HLayout newReceiptNuploadButtonLayout = new HLayout(10);
    		
    		uploadButton = new Button("Upload");
    		uploadButton.addClickHandler(new ClickHandler(){
    			public void onClick(ClickEvent e) {
    				String emptyFilesString = new String();
    				if(canSubmitForms == true){
    					for (int i = 0; i <= currentVisibleUploadItemNumber; i++) {
    						progressMessages[i].setValue("Uploading....");
    						uploadForms[i].submitForm();
    					}
    					uploadButton.disable();
    					SC.say("File Upload in Progress in background...You can continue using other services..");
    				}
    			}
    		});
    
    		newReceiptNuploadButtonLayout.addMember(uploadButton);
    		newReceiptNuploadButtonLayout.setHeight("1");
    		
    		
    		VStack stack = new VStack();
    		stack.setWidth100();
    		stack.setMembersMargin(10);
    		stack.setDefaultLayoutAlign(Alignment.CENTER);
    
    		for(int i=0;i<COUNT_OF_UPLOAD_ITEMS;i++){
    			frames[i] = new NamedFrame(TARGET + i);
    			frames[i].setWidth("1px");
    			frames[i].setHeight("1px");
    			frames[i].setVisible(false);
    		}
    
    		VStack mainLayout = new VStack();
    		mainLayout.setWidth(300);
    		mainLayout.setHeight(200);
    		
    		for (int i = 0; i < COUNT_OF_UPLOAD_ITEMS; i++) {
    			stack.addMember(uploadForms[i]);
    		}
    		stack.addMember(addRemoveButtonLayout);
    		stack.addMember(newReceiptNuploadButtonLayout);
    		mainLayout.addMember(stack);
    		for (int i = 0; i < COUNT_OF_UPLOAD_ITEMS; i++) {
    			mainLayout.addMember(frames[i]);
    		}
    		addChild(mainLayout);
    		draw();
    		
    		
    	}
    
    	public void setHiddenItem(String name, String value) {
    		for (HiddenItem item: hiddenItems)
    			if (item.getName().equals(name)) {
    				item.setValue(value);
    				return;
    			}
    	}
    	public void setUploadListener(FileUploadListener listener) {
    		this.listener = listener;
    	}
    	
    	//the restult String comes as "currentpiece|S/F"  where S/F = success/failure
    	public void uploadComplete(String fileName) {
               //the control should reach here after the http processing
               //this is the call back method
    	}
    	
    	
    	private native void initComplete(FileUploadScreen upload) /*-{
    	   $wnd.uploadComplete = function (fileName) {
        	upload.@com.areceipts.webapp.client.FileUploadScreen::uploadComplete(Ljava/lang/String;)(fileName);
        	};
        }-*/;
    }
    The above code works fine in my local host with the tomcat version 5.5.25 and above.

    But when I use the same code in a hosted environment (I use mochahost shared Tomcat JVM) the call back is not coming back to uploadComplete(). I dont have a clue about javascript (and one reason for me to use GWT) and any help with this will be appreciated.

    I searched all the forums and the web to see how this could be an issue. Any leads or any tools that I can use to find out what is wrong would be of massive help.

    Additional details
    1) Local host uses Apache server, hosted machine uses NGINX
    2) In both the cases the response string that comes back is the same and as expected by the GWT callback method. The response is shown below
    <html><body><script type="text/javascript">if (parent.uploadComplete) parent.uploadComplete('0|S');</script></body></html>

    I realize that there is a MultiFileItem in SmartGWT 3.0 and dont want to use it currently.

    Thanks.
    Last edited by tallkarthick; 16 May 2012, 19:15.

    #2
    need codes

    Can you show me the complete codes????
    Thanks!!!!!

    Comment

    Working...
    X