Announcement

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

    ListGrid Update Record Exception

    Hi all,
    I have simplest example of usage listgrid.

    My Env :
    1. OS - Ubuntu 9.10 x86_64
    2. Browser Version - Firefox 4.0.1
    3. SmartGWT Version : SmartGWTEE 2.4 (Evaluation)

    I have ListGrid and i want some operations without communicate to server. (I don't use any Datasources), also I have 3 buttons below ListGrid : add Record, Edit Record and Delete Records (I will attach all screenshots later)
    Here is My Code Snippets :
    1. Main Panel :
    Code:
    			VLayout hLayout = new VLayout(5);
    			hLayout.setWidth(750);
    			hLayout.setHeight100();
    			
    			final ListGrid listGridPhones = new ListGrid();
    			listGridPhones.setHeight(150);
    			listGridPhones.setWidth100();
    
    			// phone number field
    			ListGridField phoneNumberField = new ListGridField("phone",
    					"ტელეფონის ნომერი", 140);
    			// open/close field
    			ListGridField opCloseField = new ListGridField("is_hide_descr",
    					"ღია/დაფარული", 100);
    			// is parallel or not field
    			ListGridField parallelUsualField = new ListGridField(
    					"is_parallel_descr", "პარალელური", 120);
    			// phone status field
    			ListGridField phoneStatusField = new ListGridField("phone_status",
    					"სტატუსი", 100);
    			// phone state field
    			ListGridField phoneStateField = new ListGridField("phone_state",
    					"მდგომარეობა", 100);
    			// phone type field
    			ListGridField phoneTypeField = new ListGridField("phone_type", "ტიპი",
    					119);
    
    			listGridPhones.setFields(phoneNumberField, opCloseField,
    					parallelUsualField, phoneStatusField, phoneStateField,
    					phoneTypeField);
    			HLayout buttons = new HLayout(5);
    			IButton addPhone = new IButton("add");
    			addPhone.addClickHandler(new ClickHandler() {
    				@Override
    				public void onClick(ClickEvent event) {
    					DlgAddEditAbPhone addEditAbPhone = new DlgAddEditAbPhone(null,
    							listGridPhones, null);
    					addEditAbPhone.show();
    				}
    			});
    			IButton editPhone = new IButton("edit");
    			editPhone.addClickHandler(new ClickHandler() {
    				@Override
    				public void onClick(ClickEvent event) {
    
    					ListGridRecord listGridRecord = listGridPhones
    							.getSelectedRecord();
    					if (listGridRecord == null) {
    						SC.say("მონიშნეთ ჩანაწერი ცხრილში!");
    						return;
    					}
    					DlgAddEditAbPhone addEditAbPhone = new DlgAddEditAbPhone(
    							listGridRecord, listGridPhones, null);
    					addEditAbPhone.show();
    				}
    			});
    			IButton deletePhone = new IButton("Delete");
    			buttons.setMembers(addPhone, editPhone, deletePhone);
    			hLayout.setMembers(listGridPhones,buttons);
    			RootPanel.get().add(hLayout);
    Here is my ListGrid

    2. Popup Window for Adding/Editing records.
    Code:
    public class DlgAddEditAbPhone extends Window {
    
    	private VLayout hLayout;
    	private DynamicForm formPhone;
    	private TextItem phoneItem;
    	private ComboBoxItem isHideItem;
    	private ComboBoxItem isParallelItem;
    	private ComboBoxItem phoneStatusItem;
    	private ComboBoxItem phoneStateItem;
    	private ComboBoxItem phoneTypeItem;
    	private ListGrid listGridPhones;
    	private ListGridRecord listGridRecord;
    	private DataSource phonesDS;
    
    	public DlgAddEditAbPhone(ListGridRecord listGridRecord,
    			ListGrid listGridPhones, DataSource phonesDS) {
    		this.listGridPhones = listGridPhones;
    		this.listGridRecord = listGridRecord;
    		this.phonesDS = phonesDS;
    		setWidth(750);
    		setHeight(150);
    		setTitle(listGridRecord == null ? "ახალი ნომრის დამატება"
    				: "ნომრის შესწორება");
    		setShowMinimizeButton(false);
    		setIsModal(true);
    		setShowModalMask(true);
    		setCanDrag(false);
    		setCanDragReposition(false);
    		setCanDragResize(false);
    		setCanDragScroll(false);
    		centerInPage();
    
    		hLayout = new VLayout(5);
    		hLayout.setWidth100();
    		hLayout.setHeight100();
    
    		formPhone = new DynamicForm();
    		formPhone.setPadding(10);
    		formPhone.setAutoFocus(true);
    		formPhone.setWidth100();
    		formPhone.setTitleWidth(80);
    		formPhone.setNumCols(7);
    		formPhone.setTitleOrientation(TitleOrientation.TOP);
    
    		phoneItem = new TextItem();
    		phoneItem.setTitle("ტელეფონი");
    		phoneItem.setName("phone");
    		phoneItem.setWidth(170);
    
    		isHideItem = new ComboBoxItem();
    		isHideItem.setValueMap(MapUtil.getInstance().getMapOpClose());
    		isHideItem.setDefaultToFirstOption(true);
    		isHideItem.setTitle("ღია/დაფარული");
    		isHideItem.setName("is_hide");
    		isHideItem.setWidth(112);
    
    		isParallelItem = new ComboBoxItem();
    		isParallelItem.setValueMap(MapUtil.getInstance().getMapParall());
    		isParallelItem.setDefaultToFirstOption(true);
    		isParallelItem.setTitle("პარალელური");
    		isParallelItem.setName("is_parallel");
    		isParallelItem.setWidth(120);
    
    		phoneStatusItem = new ComboBoxItem();
    		phoneStatusItem.setValueMap(MapUtil.getInstance().getMapStatuses());
    		phoneStatusItem.setDefaultToFirstOption(true);
    		phoneStatusItem.setTitle("სტატუსი");
    		phoneStatusItem.setName("phone_status_id");
    		phoneStatusItem.setWidth(100);
    
    		phoneStateItem = new ComboBoxItem();
    		phoneStateItem.setValueMap(MapUtil.getInstance().getMapStates());
    		phoneStateItem.setDefaultToFirstOption(true);
    		phoneStateItem.setTitle("მდგომარეობა");
    		phoneStateItem.setName("phone_state_id");
    		phoneStateItem.setWidth(100);
    
    		phoneTypeItem = new ComboBoxItem();
    		phoneTypeItem.setValueMap(MapUtil.getInstance().getMapTypes());
    		phoneTypeItem.setDefaultToFirstOption(true);
    		phoneTypeItem.setTitle("ტიპი");
    		phoneTypeItem.setName("phone_type_id");
    		phoneTypeItem.setWidth(119);
    
    		if (listGridRecord != null) {
    			phoneItem.setValue(listGridRecord.getAttribute("phone"));
    			isHideItem.setValue(listGridRecord.getAttribute("is_hide"));
    			isParallelItem.setValue(listGridRecord.getAttribute("is_parallel"));
    			phoneStatusItem.setValue(listGridRecord
    					.getAttribute("phone_status_id"));
    			phoneStateItem.setValue(listGridRecord
    					.getAttribute("phone_state_id"));
    			phoneTypeItem
    					.setValue(listGridRecord.getAttribute("phone_type_id"));
    		}
    
    		formPhone.setFields(phoneItem, isHideItem, isParallelItem,
    				phoneStatusItem, phoneStateItem, phoneTypeItem);
    
    		HLayout hLayoutItem = new HLayout(5);
    		hLayoutItem.setWidth100();
    		hLayoutItem.setAlign(Alignment.RIGHT);
    		hLayoutItem.setMargin(10);
    
    		IButton saveItem = new IButton();
    		saveItem.setTitle("save");
    		saveItem.setWidth(100);
    
    		IButton cancItem = new IButton();
    		cancItem.setTitle("close");
    		cancItem.setWidth(100);
    
    		hLayoutItem.setMembers(saveItem, cancItem);
    		hLayout.setMembers(formPhone, hLayoutItem);
    		addItem(hLayout);
    
    		cancItem.addClickHandler(new ClickHandler() {
    			@Override
    			public void onClick(ClickEvent event) {
    				destroy();
    			}
    		});
    
    		saveItem.addClickHandler(new ClickHandler() {
    			@Override
    			public void onClick(ClickEvent event) {
    				addRecord();
    			}
    		});
    	}
    
    	private void addRecord() {
    		try {
    			Object oPhone = phoneItem.getValue();
    			if (oPhone == null || oPhone.toString().trim().equals("")) {
    				SC.say("გთხოვთ შეიყვანოთ ტელეფონის ნომერი !");
    				return;
    			}
    			Integer phone = null;
    			try {
    				phone = Integer.parseInt(oPhone.toString());
    			} catch (Exception e) {
    				SC.say("არასწორი ტელეფონის ნომერი " + oPhone.toString()
    						+ " !. ტელეფონის ნომერი შედგება მხოლოდ ციფრებისაგან. ");
    				return;
    			}
    			Object opClose = isHideItem.getValue();
    			if (opClose == null) {
    				SC.say("გთხოვთ აირჩიოთ ტელეფონის ნომერი ღიაა თუ დაფარული !");
    				return;
    			}
    			Integer iOpClose = null;
    			try {
    				iOpClose = Integer.parseInt(opClose.toString());
    			} catch (NumberFormatException e) {
    				SC.say("გთხოვთ აირჩიოთ ტელეფონის ნომერი ღიაა თუ დაფარული !");
    				return;
    			}
    			Object paralelUsual = isParallelItem.getValue();
    			if (paralelUsual == null) {
    				SC.say("გთხოვთ აირჩიოთ ტელეფონის ნომერი პარალელურია თუ ჩვეულებრივი !");
    				return;
    			}
    			Integer iParalelUsual = null;
    			try {
    				iParalelUsual = Integer.parseInt(paralelUsual.toString());
    			} catch (NumberFormatException e) {
    				SC.say("გთხოვთ აირჩიოთ ტელეფონის ნომერი პარალელურია თუ ჩვეულებრივი !");
    				return;
    			}
    			Object phoneStatus = phoneStatusItem.getValue();
    			if (phoneStatus == null) {
    				SC.say("გთხოვთ აირჩიოთ ტელეფონის სტატუსი !");
    				return;
    			}
    			Integer iPhoneStatus = null;
    			try {
    				iPhoneStatus = Integer.parseInt(phoneStatus.toString());
    			} catch (NumberFormatException e) {
    				SC.say("გთხოვთ აირჩიოთ ტელეფონის სტატუსი !");
    				return;
    			}
    
    			Object phoneState = phoneStateItem.getValue();
    			if (phoneState == null) {
    				SC.say("გთხოვთ აირჩიოთ ტელეფონის მდგომარეობა !");
    				return;
    			}
    			Integer iPhoneState = null;
    			try {
    				iPhoneState = Integer.parseInt(phoneState.toString());
    			} catch (NumberFormatException e) {
    				SC.say("გთხოვთ აირჩიოთ ტელეფონის მდგომარეობა !");
    				return;
    			}
    
    			Object phoneType = phoneTypeItem.getValue();
    			if (phoneType == null) {
    				SC.say("გთხოვთ აირჩიოთ ტელეფონის ტიპი !");
    				return;
    			}
    			Integer iPhoneType = null;
    			try {
    				iPhoneType = Integer.parseInt(phoneType.toString());
    			} catch (NumberFormatException e) {
    				SC.say("გთხოვთ აირჩიოთ ტელეფონის ტიპი !");
    				return;
    			}
    			boolean isAdd = false;
    			if (listGridRecord == null) {
    				listGridRecord = new ListGridRecord();
    				isAdd = true;
    			}
    			ListGridRecord records[] = listGridPhones.getRecords();
    			if (records != null && records.length > 0) {
    				for (ListGridRecord record : records) {
    					if (listGridRecord.equals(record)) {
    						continue;
    					}
    					String rPhone = record.getAttribute("phoneNumber");
    					if (rPhone == null) {
    						continue;
    					}
    					if (rPhone.equals(phone.toString())) {
    						SC.say("ასეთი ნომერი უკვე მინიჭებულია ამ აბონენტისათვის");
    						return;
    					}
    				}
    			}
    			// TODO DB Check
    			listGridRecord.setAttribute("phone", phone.toString());
    			listGridRecord.setAttribute("is_hide", iOpClose);
    			listGridRecord.setAttribute("is_parallel", iParalelUsual);
    			listGridRecord.setAttribute("phone_status_id", iPhoneStatus);
    			listGridRecord.setAttribute("phone_state_id", iPhoneState);
    			listGridRecord.setAttribute("phone_type_id", iPhoneType);
    			listGridRecord.setAttribute("is_hide_descr", MapUtil.getInstance()
    					.getMapOpClose().get(iOpClose.toString()));
    			listGridRecord
    					.setAttribute("is_parallel_descr", MapUtil.getInstance()
    							.getMapParall().get(iParalelUsual.toString()));
    			listGridRecord.setAttribute("phone_status", MapUtil.getInstance()
    					.getMapStatuses().get(iPhoneStatus.toString()));
    			listGridRecord.setAttribute("phone_state", MapUtil.getInstance()
    					.getMapStates().get(iPhoneState.toString()));
    			listGridRecord.setAttribute("phone_type", MapUtil.getInstance()
    					.getMapTypes().get(iPhoneType.toString()));
    			if (isAdd) {
    				listGridPhones.addData(listGridRecord);
    			} else {
    				listGridPhones.updateData(listGridRecord);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    			SC.say(e.toString());
    		}
    	}
    }

    Adding new Records works fine, I've problem with update selected record.
    Because I got an exception after saving edited record :

    3. Error :
    Code:
    [ERROR] [callcenter] - 18:50:58.422:MUP1:WARN:Log:Update by primary key cannot be performed without a DataSource.Modify the record directly instead
    
    
    com.smartgwt.client.core.JsObject$SGWT_WARN: 18:50:58.422:MUP1:WARN:Log:Update by primary key cannot be performed without a DataSource.Modify the record directly instead
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:105)
        at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
        at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
        at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:326)
        at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:207)
        at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:129)
        at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
        at com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:289)
        at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:107)
        at com.smartgwt.client.widgets.grid.ListGrid.updateData(ListGrid.java)
        at com.info08.billing.callcenter.client.dialogs.correction.DlgAddEditAbPhone.addRecord(DlgAddEditAbPhone.java:313)
        at com.info08.billing.callcenter.client.dialogs.correction.DlgAddEditAbPhone.access$0(DlgAddEditAbPhone.java:158)
        at com.info08.billing.callcenter.client.dialogs.correction.DlgAddEditAbPhone$2.onClick(DlgAddEditAbPhone.java:153)
        at com.smartgwt.client.widgets.events.ClickEvent.dispatch(ClickEvent.java:98)
        at com.smartgwt.client.widgets.events.ClickEvent.dispatch(ClickEvent.java:1)
        at com.google.gwt.event.shared.HandlerManager$HandlerRegistry.fireEvent(HandlerManager.java:65)
        at com.google.gwt.event.shared.HandlerManager$HandlerRegistry.access$1(HandlerManager.java:53)
        at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:178)
        at com.smartgwt.client.widgets.BaseWidget.fireEvent(BaseWidget.java:66)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
        at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
        at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
        at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:326)
        at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:207)
        at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:129)
        at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
        at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
        at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
        at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
        at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:214)
        at sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
        at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
        at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
        at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281)
        at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531)
        at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352)
        at java.lang.Thread.run(Thread.java:662)


    I don't know why I got this Exception :(

    Any Idea will be appreciated.


    Regards,
    Paata Lominadze.
    Attached Files
    Last edited by paata; 15 May 2011, 07:56.
Working...
X