Announcement

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

    Exception in JSOHelper.convertToMap()

    Hi,

    we have a problem with the function JSOHelper.convertToMap (ListGridRecord.getJsObj()) if the record is >expanded<.

    Code:
    Exception occurred: (RangeError): Maximum call stack size exceeded. 
    line: 3 sourceId: 4743236136 sourceURL:
    Click the "Test" button once with and once without expanded ListGrid

    Testcase (BuiltInDS):
    Code:
    package com.smartgwt.sample.client;
    
    import java.util.Map;
    
    import com.google.gwt.core.client.EntryPoint;
    import com.google.gwt.core.client.GWT;
    import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
    import com.smartgwt.client.data.DataSource;
    import com.smartgwt.client.data.Record;
    import com.smartgwt.client.types.Alignment;
    import com.smartgwt.client.types.ExpansionMode;
    import com.smartgwt.client.util.JSOHelper;
    import com.smartgwt.client.util.SC;
    import com.smartgwt.client.widgets.Canvas;
    import com.smartgwt.client.widgets.IButton;
    import com.smartgwt.client.widgets.events.ClickEvent;
    import com.smartgwt.client.widgets.events.ClickHandler;
    import com.smartgwt.client.widgets.form.DynamicForm;
    import com.smartgwt.client.widgets.form.ValuesManager;
    import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
    import com.smartgwt.client.widgets.form.fields.TextItem;
    import com.smartgwt.client.widgets.grid.ListGrid;
    import com.smartgwt.client.widgets.grid.ListGridRecord;
    import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
    import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
    import com.smartgwt.client.widgets.layout.HLayout;
    import com.smartgwt.client.widgets.layout.VLayout;
    import com.smartgwt.client.widgets.layout.VStack;
    
    /**
     * Entry point classes define <code>onModuleLoad()</code>.
     */
    public class BuiltInDS implements EntryPoint {
    	private ListGrid boundList;
    
    
    	/**
    	 * This is the entry point method.
    	 */
    	@Override
    	public void onModuleLoad() {
    
    		GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
    
    			@Override
    			public void onUncaughtException(Throwable e) {
    				GWT.log("Exception occurred: ", e);
    				SC.warn("Exception occurred: " + e.getMessage());
    			}
    		});
    
    		VStack vStack = new VStack();
    		vStack.setLeft(175);
    		vStack.setTop(75);
    		vStack.setWidth("70%");
    		vStack.setMembersMargin(20);
    
    
    		boundList = new ListGrid()
    
    		{  			
    
    			@Override  
    			protected Canvas getExpansionComponent(final ListGridRecord record) {  
    
    				final ValuesManager vm = new ValuesManager();
    				vm.setDataSource(DataSource.get("animals"));
    				vm.editRecord(record);  
    
    				final ListGrid grid = this;  
    				VLayout layout = new VLayout(5);  
    				layout.setPadding(5);  
    
    				final DynamicForm df = new DynamicForm();  
    				df.setNumCols(4);  
    				df.setUseAllDataSourceFields(false);
    				df.setDataSource(DataSource.get("animals"));
    				df.setValuesManager(vm);
    
    				TextItem animal = new TextItem ("commonName"); 
    				TextItem scientificName = new TextItem ("scientificName"); 
    				df.setFields(animal, scientificName);
    				TextItem lifeSpan = new TextItem ("lifeSpan"); 
    				ComboBoxItem status = new ComboBoxItem ("status"); 	
    
    				final DynamicForm df2 = new DynamicForm();  
    				df2.setNumCols(4);  
    				df2.setUseAllDataSourceFields(false);
    				df2.setDataSource(DataSource.get("animals"));
    				df2.setValuesManager(vm);
    				df2.setFields(lifeSpan, status);
    
    				IButton saveButton = new IButton("Save");  
    				saveButton.addClickHandler(new ClickHandler() {  
    					@Override
    					public void onClick(ClickEvent event) {  					
    						vm.saveData();	
    						grid.collapseRecord(record);  
    					}  
    				});  
    
    				IButton cancelButton = new IButton("Done");  
    				cancelButton.addClickHandler(new ClickHandler() {  
    					@Override
    					public void onClick(ClickEvent event) {  
    						grid.collapseRecord(record);  
    					}  
    				});  
    
    				HLayout hLayout = new HLayout(10);  
    				hLayout.setAlign(Alignment.CENTER);  
    				hLayout.addMember(saveButton);  
    				hLayout.addMember(cancelButton);  
    
    				layout.addMember(df);  
    				layout.addMember(df2);  
    				layout.addMember(hLayout);  
    				return layout;  
    			}  
    		};      
    		boundList.setDataSource(DataSource.get("animals"));
    		boundList.setCanExpandRecords(true);  
    		boundList.setExpansionMode(ExpansionMode.EDITOR); 
    		boundList.setHeight(200);
    		boundList.setCanEdit(true);
    		boundList.setExpansionCanEdit(true);
    		boundList.fetchData();
    		boundList.setAutoSaveEdits(true);
    
    		boundList.addRecordClickHandler(new RecordClickHandler() {
    			@Override
    			public void onRecordClick(RecordClickEvent event) {
    				Record record = event.getRecord();
    
    			}
    		});
    
    		vStack.addMember(boundList);
    
    		IButton testButton = new IButton("Test");  
    		testButton.addClickHandler(new ClickHandler() {  
    			@Override
    			public void onClick(ClickEvent event) {  
    				ListGridRecord record = boundList.getSelectedRecord();
    				if (record==null) {
    					SC.say("nothing");
    					return;
    				} 
    				
    				// We need a map but JSOHelper.convertToMap produces error if ExpansionComponent is activated  
    				Map<String, Object> map = JSOHelper.convertToMap(record.getJsObj());
    				SC.say(map.get("commonName").toString());
    			}  
    		});  
    		vStack.addMember(testButton);
    
    		HLayout hLayout = new HLayout(10);
    		hLayout.setMembersMargin(10);
    		hLayout.setHeight(22);
    
    		vStack.addMember(hLayout);
    
    		vStack.draw();
    	}
    
    }
    We need all the fields of the record as a map.

    used: smartgwtpower 2.5, Build 2011/01/28

    Regards,
    Timo

    #2
    Thanks for the clear test case.
    This should now be resolved - please try the next nightly build!

    Regards
    Isomorphic Software

    Comment


      #3
      problem solved.
      thanks

      Comment

      Working...
      X