I am creating a FormItem, which is used as a FilterEditor.  The first time I click on it, everything works properly.  The second time, a JavaScript error pops up stating that form is null, and the popup is empty.  Any subsequent times I click on the Filter's icon, the form items have a null JsObject tied to them:
	In my main class, I call it like so:
	
							
						
					Code:
	
	package com.smartgwt.client;
import java.util.Date;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.CanvasItem;
import com.smartgwt.client.widgets.form.fields.DateItem;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.FormItemIcon;
import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import com.smartgwt.client.widgets.form.fields.events.IconClickEvent;
import com.smartgwt.client.widgets.form.fields.events.IconClickHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
public class DateRangeItem extends FormItem
{
	protected final ListGrid grid;
	protected final String dateField;	// = "Report";
	protected final Window popup = new Window();
	protected final DynamicForm form = new DynamicForm();
	protected final DateItem startDate;
	protected final DateItem endDate;
	protected final ButtonItem thirtyDaysButton = new ButtonItem("last30", "Last 30 Days");
	protected final ButtonItem sixtyDaysButton = new ButtonItem("last60", "Last 60 Days");
	protected final ButtonItem ninetyDaysButton = new ButtonItem("last90", "Last 90 Days");
	protected final ButtonItem filterButton = new ButtonItem("addFilter", "Add Filter");
	public DateRangeItem(ListGrid listGrid, String dateField)
	{
		super();
		this.grid = listGrid;
		this.dateField = dateField;
		startDate = new DateItem("start" + dateField + "Date");
		endDate = new DateItem("end" + dateField + "Date");
		addIconClickHandler(new IconClickHandler()
		{
			public void onIconClick(IconClickEvent event)
			{
				selectDate();
			}
		});
		FormItemIcon icon = new FormItemIcon();
		icon.setPrompt("Select date range");
		icon.setSrc("date_control.png");
		setIcons(icon);
		
        setIconHeight(18);
        setIconWidth(18);
        setIconVAlign(VerticalAlignment.CENTER);
        setShowPickerIcon(false);
//        setPickerIconWidth(16);
//        setPickerIconHeight(16);
//        setPickerIconSrc("date_control.png");
//        setShowPickerIcon(true);
        setTitle("Select Date Range");
        startDate.setDefaultValue(new Date(System.currentTimeMillis() - calcDaysInMillis(90)));	// Default to 90 days prior
        endDate.setDefaultValue(new Date());
        
        thirtyDaysButton.setEndRow(false);
        thirtyDaysButton.setAlign(Alignment.CENTER);
        thirtyDaysButton.addClickHandler(new ClickHandler()
        {
        	public void onClick(ClickEvent event)
        	{
        		startDate.setAttribute("value", new Date(System.currentTimeMillis() - calcDaysInMillis(30)));
        		endDate.setAttribute("value", new Date());
        	}
        });
        
        sixtyDaysButton.setStartRow(false);
        sixtyDaysButton.setEndRow(false);
        sixtyDaysButton.addClickHandler(new ClickHandler()
        {
        	public void onClick(ClickEvent event)
        	{
        		startDate.setValue(new Date(System.currentTimeMillis() - calcDaysInMillis(60)));
        		endDate.setValue(new Date());
        	}
        });
        
        ninetyDaysButton.setStartRow(false);
        ninetyDaysButton.addClickHandler(new ClickHandler()
        {
        	public void onClick(ClickEvent event)
        	{
        		startDate.setValue(new Date(System.currentTimeMillis() - calcDaysInMillis(90)));
        		endDate.setValue(new Date());
        	}
        });
        
        filterButton.addClickHandler(new ClickHandler()
        {
        	public void onClick(ClickEvent event)
        	{
        		Criteria criteria = grid.getFilterEditorCriteria();
        		if (criteria == null) criteria = new Criteria();
        		criteria.addCriteria(form.getValuesAsCriteria());
        		grid.invalidateCache();
        		grid.filterData(criteria);
        		popup.hide();
        	}
        });
        
        popup.setTitle("Filter on " + dateField + " Date");
        popup.setWidth(500);
        popup.setHeight(300);
        popup.centerInPage();
        popup.setIsModal(true);
        popup.addItem(form);
        
	}
	protected void selectDate()
	{
		form.setItems(startDate, endDate, thirtyDaysButton, new DoubleButtonItem(sixtyDaysButton, ninetyDaysButton), filterButton);
		
		popup.show();
	}
	
	private long calcDaysInMillis(int days)
	{
		return ((long)1000 * 60 * 60 * 24 * days);
	}
	
	protected class DoubleButtonItem extends CanvasItem
	{
		public DoubleButtonItem(ButtonItem button1, ButtonItem button2)
		{
			DynamicForm innerForm = new DynamicForm();
			innerForm.setItems(button1, button2);
			button1.setAlign(Alignment.CENTER);
			button2.setAlign(Alignment.CENTER);
			this.setCanvas(innerForm);
			this.setWidth(60);
			this.setAttribute("showTitle", false);
		}
	}
	
}
Code:
	
	ListGridField reportDateField = new ListGridField("reportDate");
reportDateField.setFilterEditorType(new DateRangeItem(listGrid, "Report"));
		
listGrid.setFields(reportDateField);

Comment