`

代码更加精简. 漂亮 GWT 2.0 UiBinder 研究.如此强大.

    博客分类:
  • java
阅读更多

以前曾写了一个用 GWT 1.7 的一个 全部的组建的测试.

 

现在花了 2 天时间将这些代码 改成了 UiBinder 的格式.

 

代码更加 精简.而且更加的漂亮.可以做很复杂的应用.

 

将布局 组建和业务逻辑 分开.

 

UiBinderTest01.ui.xml

内容如下:

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
	xmlns:g="urn:import:com.google.gwt.user.client.ui">
	<g:HTMLPanel>
		PushButton测试.
		<br></br>
		<g:PushButton text="PushButton测试." width="150px" height="25px"
			ui:field="button_0" />

		Button测试.
		<br></br>
		<g:Button text="Button测试." width="150px" height="25px"
			ui:field="button1" />
		<g:Button text="Button测试." width="150px" height="25px"
			ui:field="button2" />

		CheckBox测试
		<br></br>
		<g:CheckBox text="CheckBox测试" ui:field="checkBox_0" />
		<g:CheckBox text="CheckBox测试" ui:field="checkBox_1" />

		RadioButton测试
		<br></br>
		<g:RadioButton name="abc" text="CheckBox测试" ui:field="radioButton_0" />
		<g:RadioButton name="abc" text="CheckBox测试" ui:field="radioButton_1" />
		<g:RadioButton name="abc" text="CheckBox测试" ui:field="radioButton_2" />

		<br></br>
		TextBox测试
		<br></br>
		<g:TextBox text="TextBox测试" ui:field="textBox_0" />
		<g:Label ui:field="label_0" />

		<br></br>
		ListBox测试
		<br></br>
		<g:ListBox ui:field="listBox_0" width="150px" />
		<g:ListBox ui:field="listBox_1" width="150px" />

		<br></br>
		ListBox测试
		<br></br>
		<g:Frame url="http://www.google.com" ui:field="frame_0" width="300px"
			height="100px" />

		<br></br>
		RichTextArea测试
		<br></br>
		<g:RichTextArea ui:field="richTextArea_0" width="300px"
			height="100px" />

		<br></br>
		MenuBar测试
		<br></br>
		<g:MenuBar ui:field="menuBar_0" width="500px" />

		<br></br>
		TabBar测试
		<br></br>
		<g:TabBar ui:field="tabBar_0" width="300px" />
		<g:Label text="请点击TabBar." ui:field="tabBarLabel_0" width="300px" />

		<br></br>
		Grid测试
		<br></br>
		<g:Grid borderWidth="1" cellPadding="1" cellSpacing="1"
			ui:field="grid_0" width="300px" height="200px">
		</g:Grid>

		<br></br>
		FlexTable测试
		<br></br>
		<g:FlexTable borderWidth="1" cellPadding="1" cellSpacing="1"
			ui:field="flexTable_0" width="100%" height="100px" />

		<br></br>
		Tree测试
		<br></br>
		<g:Tree ui:field="tree_0" width="300px" height="200px" />

		<br></br>
		Image测试
		<br></br>
		<g:Image url="googleapple.jpg" width="300px" height="100px" />

		<br></br>
		ScrollPanel测试
		<br></br>
		<g:ScrollPanel ui:field="scrollPanel_0" width="300px"
			height="100px" />

		<br></br>
		PopupPanel测试
		<br></br>
		<g:Button text="PopupPanel测试" ui:field="popupPanelButton"
			width="150px" height="25px" />

		<br></br>
		DialogBox测试
		<br></br>
		<g:Button text="DialogBox测试" ui:field="dialogBoxButton"
			width="150px" height="25px" />

		<br></br>
		DockPanel测试
		<br></br>
		<g:DockPanel ui:field="dockPanel_0" width="300px" height="200px">
		</g:DockPanel>


		<br></br>
		HorizontalPanel测试
		<br></br>
		<g:HorizontalPanel borderWidth="1">
			<g:Button text="DialogBox测试" width="150px" height="25px" />
			<g:Button text="DialogBox测试" width="150px" height="25px" />
			<g:Button text="DialogBox测试" width="150px" height="25px" />
			<g:Button text="DialogBox测试" width="150px" height="25px" />
		</g:HorizontalPanel>

		<br></br>
		VerticalPanel测试
		<br></br>
		<g:VerticalPanel borderWidth="1">
			<g:Button text="DialogBox测试" width="150px" height="25px" />
			<g:Button text="DialogBox测试" width="150px" height="25px" />
			<g:Button text="DialogBox测试" width="150px" height="25px" />
			<g:Button text="DialogBox测试" width="150px" height="25px" />
		</g:VerticalPanel>

		<br></br>
		FlowPanel测试
		<br></br>
		<g:FlowPanel >
			<g:Button text="DialogBox测试" width="150px" height="25px" />
			<g:Button text="DialogBox测试" width="150px" height="25px" />
			<g:Button text="DialogBox测试" width="150px" height="25px" />
		</g:FlowPanel>

		<br></br>
		StackPanel测试
		<br></br>
		<g:StackPanel ui:field="stackPanel_0">
			<g:HTML>测试001</g:HTML>
			<g:HTML>测试002</g:HTML>
			<g:HTML>测试003</g:HTML>
			<g:HTML>测试004</g:HTML>
		</g:StackPanel>
		
		<br></br>
		DeckPanel测试
		<br></br>
		<g:DeckPanel ui:field="deckPanel_0" width="300px" height="200px">
			<g:HTML><font color='red'>testDeck001</font></g:HTML>
			<g:HTML><font color='blue'>testDeck001</font></g:HTML>
			<g:HTML><font color='yellow'>testDeck001</font></g:HTML>
			<g:HTML><font color='green'>testDeck001</font></g:HTML>
		</g:DeckPanel>
		<g:Button ui:field="deckPanelButton_0" text="DeckPanel测试" width="150px" height="25px" />
		
		<br></br>
		DisclosurePanel测试
		<br></br>
		[<g:DisclosurePanel>
			<g:HTML>测试001</g:HTML>
		</g:DisclosurePanel>]
		
		<br></br>
		TabPanel测试
		<br></br>
		<g:TabPanel ui:field="tabPanel_0" width="300px" height="200px">	 
		</g:TabPanel>
		
		<br></br>
		MultiWordSuggestOracle测试
		<br></br>
		<g:SuggestBox ui:field="suggestBox_0"></g:SuggestBox>
		
		<br></br>
		HorizontalSplitPanel测试
		<br></br>
		<g:HorizontalSplitPanel width="300px" height="200px">
			<g:HTML>测试左侧</g:HTML>
			<g:HTML>测试右侧</g:HTML>
		</g:HorizontalSplitPanel>
		
		<br></br>
		VerticalSplitPanel测试
		<br></br>
		<g:VerticalSplitPanel width="300px" height="200px">
			<g:HTML>测试上面</g:HTML>
			<g:HTML>测试下面</g:HTML>
		</g:VerticalSplitPanel>


	</g:HTMLPanel>

</ui:UiBinder> 

 

UiBinderTest01.java

代码:

 

package com.toeoso.uibinder.test.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.OpenEvent;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiFactory;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Random;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DeckPanel;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Frame;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.MultiWordSuggestOracle;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.RichTextArea;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.StackPanel;
import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwt.user.client.ui.TabBar;
import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class UiBinderTest01 extends Composite {

	private static UiBinderTest01UiBinder uiBinder = GWT
			.create(UiBinderTest01UiBinder.class);

	interface UiBinderTest01UiBinder extends UiBinder<Widget, UiBinderTest01> {
	}

	public interface Resources extends ClientBundle {
		@Source("googleapple.jpg")
		ImageResource googleApple();
	}

	public UiBinderTest01() {
		initWidget(uiBinder.createAndBindUi(this));
		/* 设置输入框右对齐. */
		textBox_0.setTextAlignment(TextBox.ALIGN_RIGHT);
		/** 这个函数不可以放类体里面. */
		textBox_0.addKeyUpHandler(new KeyUpHandler() {
			public void onKeyUp(KeyUpEvent event) {
				// 说明.用changeListener的时候.在光标未移出的时候不会改变.
				String temp = textBox_0.getText();
				System.out.println(temp);
				label_0.setText(temp);
			}
		});

		listBox_0.setVisibleItemCount(6);// 设置成可选数目是6.
		listBox_1.setVisibleItemCount(6);// 设置成可选数目是6.
		listBox_0.addItem("001");
		listBox_0.addItem("002");
		listBox_0.addItem("003");
		listBox_0.addItem("004");

		richTextArea_0.setHTML("<font color='red'>abc</font>");

		Command cmd = new Command() {
			public void execute() {
				Window.alert("点击Menu.");
			}
		};
		MenuBar bar01 = new MenuBar(true);
		// 设置true的时候.显示竖向菜单.
		bar01.addItem("001", cmd);
		bar01.addItem("002", cmd);
		bar01.addItem("003", (new MenuBar(true).addItem("子菜单.", cmd)
				.getParentMenu()));

		// 主菜单显示.
		menuBar_0.addItem("File", bar01);
		menuBar_0.addItem("Save", bar01);
		menuBar_0.addItem("Exit", bar01);

		final String[] tabBarLabelText = { "这个是第1个TabBar.", "这个是第2个TabBar.",
				"这个是第3个TabBar.", "这个是新添加的第1个TabBar.", "这个是新添加的第2个TabBar." };
		tabBar_0.addTab("这个是第1个TabBar.");
		tabBar_0.addTab("这个是第2个TabBar.");
		tabBar_0.addTab("这个是第3个TabBar.");
		// 设置一个数组变量存储值.这里不可以是一个int型.这样会改变不了值.
		tabBar_0.addSelectionHandler(new SelectionHandler<Integer>() {
			public void onSelection(SelectionEvent<Integer> event) {
				System.out.println(tabBar_0.getSelectedTab());
				tabBarLabel_0
						.setText(tabBarLabelText[tabBar_0.getSelectedTab()]);
			}
		});

		// 设置网格的数量.3X3的网格.
		grid_0.setWidget(0, 0, new HTML("hello!"));
		grid_0.setWidget(1, 1, new HTML("hello!"));
		grid_0.setWidget(2, 2, new HTML("hello!"));
		grid_0.setWidget(1, 2, new HTML("hello!"));
		// 插入测试数据.数据是从(0,0)开始到(2,2)结束.
		// Grid测试结束.

		/** 对flexTable进行数据添加. */
		for (int i = 0; i < 16; i++) {
			flexTable_0.setText(i / 4, i % 4, "id:" + i);
		}

		TreeItem treeItem1 = new TreeItem("01");
		treeItem1.addItem(new TreeItem("sub01"));
		TreeItem treeItem2 = new TreeItem("02");
		treeItem2.addItem(new TreeItem("sub02"));

		TreeItem treeItem3 = new TreeItem("03");
		TreeItem treeItem3_1 = new TreeItem("03_1");
		treeItem3.addItem(treeItem3_1);
		TreeItem treeItem3_2 = new TreeItem("03_2");
		treeItem3_1.addItem(treeItem3_2);
		TreeItem treeItem3_3 = new TreeItem("03_3");
		treeItem3_2.addItem(treeItem3_3);

		tree_0.addItem(treeItem1);
		tree_0.addItem(treeItem2);
		tree_0.addItem(treeItem3);

		// Resources res = GWT.create(Resources.class);
		// image_0.setResource(res.googleApple());

		String strText = "";
		for (int i = 0; i < 100; i++) {
			strText += "ABCDEFGHI";
		}
		// scrollPanel_0.setSize("100px", "100px");
		scrollPanel_0.setWidget(new HTML(strText));
		scrollPanel_0.setVisible(true);
		
		dockPanel_0.add(new HTML("NORTH"), DockPanel.NORTH);
		dockPanel_0.add(new HTML("SOUTH"), DockPanel.SOUTH);
		dockPanel_0.add(new HTML("WEST"), DockPanel.WEST);
		dockPanel_0.add(new HTML("EAST"), DockPanel.EAST);
		dockPanel_0.add(new HTML("CENTER"), DockPanel.CENTER);
		dockPanel_0.setBorderWidth(1);
		
		stackPanel_0.setStackText(0, "stackPanel 0");
		stackPanel_0.setStackText(1, "stackPanel 1");
		stackPanel_0.setStackText(2, "stackPanel 2");
		stackPanel_0.setStackText(3, "stackPanel 3");
		
		deckPanel_0.showWidget(0);
		
		tabPanel_0.add(new HTML("TabPanel001Content"), "001");
		tabPanel_0.add(new HTML("TabPanel002Content"), "002");
		tabPanel_0.add(new HTML("TabPanel003Content"), "003");
		tabPanel_0.selectTab(0);
		
		
	}

	@UiField
	PushButton button_0;

	@UiHandler("button_0")
	void onClick_0(ClickEvent e) {
		Window.alert("Push It !");
	}

	@UiField
	CheckBox checkBox_0;

	@UiHandler( { "checkBox_0", "checkBox_0" })
	void onClick_00(ClickEvent e) {
		Window.alert("Checked It 1!");
		if (checkBox_0.getValue()) {
			checkBox_1.setValue(false);
		} else {
			checkBox_1.setValue(true);
		}
		if (checkBox_1.getValue()) {
			checkBox_0.setValue(false);
		} else {
			checkBox_0.setValue(true);
		}
	}

	@UiField
	CheckBox checkBox_1;

	/** 测试多重绑定. */
	@UiHandler("checkBox_1")
	void onClick_11(ClickEvent e) {
		Window.alert("CheckBox It 2!");
	}

	@UiField
	CheckBox radioButton_0;
	@UiField
	CheckBox radioButton_1;
	@UiField
	CheckBox radioButton_2;

	/** 测试一个函数绑两个组件. */
	@UiHandler( { "radioButton_0", "radioButton_1", "radioButton_2" })
	void onClick_2(ClickEvent e) {
		Window.alert("CheckBox It 2!");
	}

	@UiField
	TextBox textBox_0;
	@UiField
	Label label_0;

	@UiField
	ListBox listBox_0;
	@UiField
	ListBox listBox_1;

	@UiHandler("listBox_0")
	void listBoxOnClick(ClickEvent event) {
		int id = listBox_0.getSelectedIndex();
		listBox_1.clear();// 清除所有选项.
		for (int i = 0; i < 4; i++) {
			listBox_1.addItem(id + "city:\t" + i);
		}
	}

	@UiField
	Frame frame_0;

	@UiField
	RichTextArea richTextArea_0;

	@UiField
	MenuBar menuBar_0;

	@UiField
	TabBar tabBar_0;

	@UiField
	Label tabBarLabel_0;

	@UiField
	Grid grid_0;

	@UiFactory
	public Grid initGrid() {
		return new Grid(3, 3);
	}

	@UiHandler("grid_0")
	void onClick_3(ClickEvent e) {
		// 获得行.// 获得列.
		String temp = "点击了:[" + grid_0.getCellForEvent(e).getRowIndex() + ","
				+ grid_0.getCellForEvent(e).getCellIndex() + "]";
		System.out.println(temp);
	}

	@UiField
	FlexTable flexTable_0;

	@UiHandler("flexTable_0")
	void onClick_4(ClickEvent e) {
		// 获得行.// 获得列.
		String temp = "点击了:[" + flexTable_0.getCellForEvent(e).getRowIndex()
				+ "," + flexTable_0.getCellForEvent(e).getCellIndex() + "]";
		System.out.println(temp);
		Window.alert(temp);
	}

	@UiField
	Tree tree_0;

	@UiHandler("tree_0")
	void treeOnOpen(OpenEvent<TreeItem> event) {
		System.out.println("tree onOpen:\t" + event.getTarget().getHTML());
	}

	@UiHandler("tree_0")
	public void treeOnClose(CloseEvent<TreeItem> event) {
		System.out.println("tree onClose:\t" + event.getTarget().getHTML());
	}

	@UiHandler("tree_0")
	public void treeOnSelection(SelectionEvent<TreeItem> event) {
		System.out.println("tree onSelection:\t"
				+ tree_0.getSelectedItem().getHTML());
	}

	@UiField
	ScrollPanel scrollPanel_0;

	@UiField
	Button popupPanelButton;

	@UiHandler("popupPanelButton")
	public void popupPanelButtonOnClick(ClickEvent e) {
		
		final PopupPanel popupPanel = new PopupPanel();
		Button closeButton = new Button("close");
		closeButton.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				popupPanel.hide();
			}
		});
		VerticalPanel verticalPanel = new VerticalPanel();
		verticalPanel.add(new HTML("test Popup."));
		verticalPanel.add(closeButton);
		popupPanel.add(verticalPanel);
		popupPanel.center();
	}
	
	@UiField
	Button dialogBoxButton;
	
	@UiHandler("dialogBoxButton")
	public void dialogBoxButtonOnClick(ClickEvent e) {
		TestDialogBox_01 testDialogBox_01 = new TestDialogBox_01();
		testDialogBox_01.center();
		testDialogBox_01.show();
	}
	
	@UiField
	DockPanel dockPanel_0;
	
	@UiField
	StackPanel stackPanel_0;
	
	@UiField
	DeckPanel deckPanel_0;
	
	@UiField
	Button deckPanelButton_0;
	
	@UiHandler("deckPanelButton_0")
	public void onClick_5(ClickEvent event) {
		int showId = (deckPanel_0.getVisibleWidget() +1 ) % 4;
		deckPanel_0.showWidget(showId);
	}
	
	@UiField
	TabPanel tabPanel_0;
	
	@UiField
	SuggestBox suggestBox_0;
	
	@UiFactory
	public SuggestBox initSuggestBox() {
		MultiWordSuggestOracle multiWordSuggestOracle = new MultiWordSuggestOracle();
		for (int i = 0; i < 100; i++) {
			// com.google.gwt.user.client.Random静态方法.
			multiWordSuggestOracle.add(Random.nextInt() + "");
		}
		return new SuggestBox(multiWordSuggestOracle);
	}
	
}

 

 

界面效果:






 

工程源代码见附件.

 

 

遇到的错误:

19:30:41.703 [ERROR] [uibindertest] In <g:ListBox text='TextBox测试' ui:field='listBox_0'>, class ListBox has no appropriate setText() method
 <g:ListBox 没有 text 属性.
只要在组件里面有set方法的都可以进行标签的配置.

这个是动态的.配置.如:

setUrl有的话,就可以写.

<g:Frame url="http://www.google.com" ui:field="frame_0" width="300px" height="100px"/>


20:44:52.640 [ERROR] [uibindertest] Unable to load module entry point class com.toeoso.uibinder.test.client.UiBinderTest (see associated exception for details)
java.lang.IndexOutOfBoundsException: Row index: 0, Row size: 0
    at com.google.gwt.user.client.ui.Grid.prepareRow(Grid.java:306)
    at com.google.gwt.user.client.ui.Grid.prepareCell(Grid.java:251)
    at com.google.gwt.user.client.ui.HTMLTable.setWidget(HTMLTable.java:1056)
    at com.toeoso.uibinder.test.client.UiBinderTest01.<init>(UiBinderTest01.java:111)
    at com.toeoso.uibinder.test.client.UiBinderTest.onModuleLoad(UiBinderTest.java:9)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:369)
    at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:185)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:380)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222)
    at java.lang.Thread.run(Unknown Source)
	




Marks a constructor that may be used as an alternative to a widget's zero args construtor in a UiBinder template. The parameter names of the constructor may be filled as xml element attribute values.


08:13:31.250 [ERROR] [uibindertest] In <g:DockPanel height='25px' text='DialogBox测试' ui:field='dockPanel_0' width='150px'>, class DockPanel has no appropriate setText() method
<g:north size='5'>
				<g:Label>Top</g:Label>
			</g:north>
			<g:center>
				<g:Label>Body</g:Label>
			</g:center>
			<g:west size='192'>
				<g:HTML>
					<ul>
						<li>Sidebar</li>
						<li>Sidebar</li>
						<li>Sidebar</li>
					</ul>
				</g:HTML>
			</g:west>

08:14:51.328 [ERROR] [uibindertest] Uncaught exception escaped
com.google.gwt.core.client.JavaScriptException: (TypeError): boolean is not a function
 stack: TypeError: boolean is not a function
    at [object Object].CALL_NON_FUNCTION (native)
    at unknown source
    at unknown source
    at __gwt_jsInvoke (http://localhost:8888/uibindertest/hosted.html?uibindertest:70:34)
    at eval at eval (native)
    at unknown source
    at __gwt_jsInvoke (http://localhost:8888/uibindertest/hosted.html?uibindertest:70:34)
    at eval at eval (native)
    at unknown source
    at eval at eval (native)
 type: called_non_callable
 arguments: boolean
 __gwt_ObjectId: 580
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:195)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264)
    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:188)
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    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.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:1713)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:165)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264)
    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:188)
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    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.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:1713)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:165)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264)
    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:188)
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    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.BrowserChannel.reactToMessages(BrowserChannel.java:1668)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:401)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222)
    at java.lang.Thread.run(Unknown Source)
	
	
10:46:53.421 [ERROR] [uibindertest] In <g:FlowPanel borderWidth='1'>, class FlowPanel has no appropriate setBorderWidth() method
10:50:07.843 [ERROR] [uibindertest] Ambiguous setter requested: StackPanel.stackText


11:05:24.687 [ERROR] [uibindertest] Field 'deckPanel_0' does not have an 'addClickHandler' method associate


11:10:24.203 [ERROR] [uibindertest] Invalid TabPanel child element: HTML


 

都是些很好理解的错误.

一般都是  ui.xml 文件定义的 属性使用错误.

 

说明:

绑定是过很好的方法.以前写一个匿名接口实现.

现在只用写一个实现的方法.根据方法里面传入的是什么类型的事件.进行绑定.而不一定是clickEvent事件.

如:

@UiHandler("tree_0")
	void treeOnOpen(OpenEvent<TreeItem> event) {
		System.out.println("tree onOpen:\t" + event.getTarget().getHTML());
	}

	@UiHandler("tree_0")
	public void treeOnClose(CloseEvent<TreeItem> event) {
		System.out.println("tree onClose:\t" + event.getTarget().getHTML());
	}

	@UiHandler("tree_0")
	public void treeOnSelection(SelectionEvent<TreeItem> event) {
		System.out.println("tree onSelection:\t"
				+ tree_0.getSelectedItem().getHTML());
	}

 对树的事件绑定的时候就是 分别绑定了 3 过事件.OpenEvent,CloseEvent,SelectionEvent

对三个事件进行绑定.至于方法的名称用什么都无所谓.只要是不重复的就行.

而以前要实现这个就需要:

tree.addOpenHandler(new OpenHandler<TreeItem>() {
			public void onOpen(OpenEvent<TreeItem> event) {
				System.out.println("tree onOpen:\t"
						+ event.getTarget().getHTML());
			}
		});
		tree.addCloseHandler(new CloseHandler<TreeItem>() {
			public void onClose(CloseEvent<TreeItem> event) {
				System.out.println("tree onClose:\t"
						+ event.getTarget().getHTML());
			}
		});
		tree.addSelectionHandler(new SelectionHandler<TreeItem>() {
			public void onSelection(SelectionEvent<TreeItem> event) {
				// TODO Auto-generated method stub
				System.out.println("tree onSelection:\t"
						+ tree.getSelectedItem().getHTML());
			}
		});

 需要定义 3个匿名内部类.去实现. 现在看代码就方便简单多了.

可以所完全不像是做web编程了哈...

 

对于要进行初始化参数的如Grid

写道
@UiField
Grid grid_0;

@UiFactory
public Grid initGrid() {
return new Grid(3, 3);
}

 使用UiFactory 进行绑定.说明其构造的时候带参数 是 3 行 3 列的表格.

 

在设置其他组件参数的时候,我就简单的都放在构造函数里面了.

 

在每次修改 ui.xml 和 .java 文件的时候 都要进校验.

这个时候比较慢..系统像卡死了似的.

你可以少保存几次.想好了在改动.

 

几乎所有的组件都有一个参数 width="300px" height="200px"

都要设置大小.尤其是button.如果不设置大小.就会成一个小方块.

 

在使用 ui.xml 的使用 就一个 ui:filed 这个是可以自动生成的 其他的参数都要查询

这个组件下面是否有 setXXX .如果有就有 XXX 属性.首字母小写.

一般 来说 text 是组件的标题.但并不是所以的组件都有标题的.

 

这个在运行的时候就知道了.如果报错.也是很明显的信息.

 

用过ff 和chrome 进行调试 都需要下载插件.

chrome 空指针报错 3 次.. ff 没有这样的问题.

而且 chrome 报错后页面会自动跳转到google的页面.

 

在ui.xml 里面可以混合写 html 和 组件代码.

 

一般不用重新启动. 除非改了点服务端代码 修改了web.xml

否则 就刷新下就可以了.

 

一般就是 ui.xml 写错误了.

uiBinder 很强大. 值得深入研究..感觉上以后还会有 flex 的组件.

 

欢迎大家多提意见. 和我一起研究.

  • 大小: 14.4 KB
  • 大小: 8.3 KB
  • 大小: 29.2 KB
  • 大小: 10.2 KB
  • 大小: 4.2 KB
分享到:
评论
4 楼 phlsbg 2010-07-23  
下载学习,多谢
3 楼 tempture 2010-01-20  
方向是对了 感觉有点像Flex了
2 楼 duker 2009-12-23  
uibinder 有两个意义:
快速将html原型转化成为gwt组件,也就是美工整出原型来,基本直接copy过来改改就可以用了.另外就是配合layout panel进行应用级别的界面开发
1 楼 dellsoft 2009-12-17  
感觉还是zk5,代码更少
http://zkoss.org/zkdemo/userguide/

相关推荐

    smartgwt-2.0API.CHM

    smartgwt-2.0API.CHM 2009年12月18日 ... SmartGWT 2.0发布下载了

    SmartGWT2.0 API

    SmartGWT 2.0 API 是一款基于Google Web Toolkit (GWT) 2.0的高级组件库,它为开发者提供了丰富的用户界面组件和强大的功能,以构建高性能、交互式的Web应用程序。SmartGWT 2.0 在其前身的基础上进行了多方面的改进...

    Apress.Pro.Web.2.0.Application.Development.with.GWT.May.2008

    书中通过一个深入的案例研究来介绍如何构建功能丰富、用户友好的Web 2.0网站,并且涵盖了GWT 1.5版本的相关特性。 #### GWT简介 Google Web Toolkit (GWT) 是一个开源的Java工具包,用于构建高性能的Web客户端应用...

    gwt2.0-api

    gwt2.0的api文档,chm格式的,方便大家查询。

    cypal.studio.for.gwt-2.alpha

    2. **in.cypal.studio.gwt.core_2.0.0.200903252317.jar**:这个文件可能是插件的核心组件,包含了对GWT核心特性的支持,如编译、调试、代码生成和性能优化等功能。它是cypal Studio功能实现的基础,为开发者提供了...

    SmartGWT 2.0 API.zip

    SmartGWT是一个强大的Java库,专门用于构建富互联网应用程序(RIA)。它基于Google Web Toolkit (GWT) 并扩展了其功能,提供了丰富的组件库和更直观的开发接口。SmartGWT 2.0是该框架的一个早期版本,对初学者来说是...

    gwt2.0版本

    在GWT 2.0版本中,它为开发者提供了丰富的功能和改进,使得JavaScript编程变得更加简单,同时提高了应用程序的性能和用户体验。 GWT的核心理念是允许开发者使用Java语言来编写前端代码,然后通过编译器将其转换为...

    GWT2.0RC1.chm

    GWT2.0类库详细结构图,是学习GWT的首选资料

    Ext GWT 2.0: Beginner's Guide

    《Ext GWT 2.0: Beginner's Guide》是一本专为初学者设计的指南,旨在帮助读者快速掌握Ext GWT 2.0这一强大的Web应用程序开发框架。这本书结合了理论与实践,提供了丰富的示例代码和源码,使得学习过程更加直观和...

    Ext GWT 2.0, Beginner's Guide

    《Ext GWT 2.0, Beginner's Guide》是一本专为初学者设计的指南,旨在帮助读者深入了解和掌握Ext GWT 2.0这一强大的Java Web开发框架。Ext GWT,全称EXT Java Widget Toolkit,是Sencha公司开发的一个用于构建富...

    Ext GWT 2.0 Beginner’s Guide

    《Ext GWT 2.0 初学者指南》是一本专为希望提升网站用户体验的开发者设计的书籍,由Daniel Vaughan撰写。本书旨在帮助读者掌握Ext GWT这一强大的框架,通过详细的指导和实例,使读者能够迅速上手并利用Ext GWT开发出...

    org.jresearch.commons.gwt.utils.shared-1.0.45.zip

    标题 "org.jresearch.commons.gwt.utils.shared-1.0.45.zip" 提供的信息表明,这是一个与Java开发相关的开源项目,具体来说是`org.jresearch`组织下的一个 Commons GWT (Google Web Toolkit) 工具集。GWT 是一个用于...

    cypal.studio.for.gwt

    cypal.studio.for.gwt

    Ext GWT 2.0 Beginner's Guide

    ### Ext GWT 2.0 Beginner's Guide:关键知识点概览 #### 一、书籍简介与背景 《Ext GWT 2.0 Beginner's Guide》是一本专为初学者设计的指南,旨在帮助读者深入了解Ext GWT框架的核心概念及其在Web开发中的应用。...

    cypal.studio.for.gwt-1.0

    cypal.studio.for.gwt-1.0

    cypal[1].studio.for.gwt-1.0

    3. in.cypal.studio.gwt.samples_1.0.0.200808282244.jar:这个文件很可能包含了示例代码或者模板,供开发者学习和参考,以了解如何使用Cypal Studio和GWT进行实际的开发工作。 结合这些信息,我们可以推测"Cypal ...

    GWT揭秘(书签整理版)

    2. Hello GWT 3. 模块 4. JSNI 5. 在GWT中使用XML 6. GWT控件详解 7. 使用GWT控件 8. GWT-RPC 9. Ext GWT 10. (实战)俄罗斯方块游戏 11. (实战)费用申请审批流程 12. GWT与Flex整合 13. 图片缓存 CSS Sprite 14. ...

    org.liveSense.sample.gwt.notes-1.0.5.zip

    【标题】"org.liveSense.sample.gwt.notes-1.0.5.zip" 提供的是一个名为 "org.liveSense.sample.gwt.notes" 的开源项目,版本号为 1.0.5。这个项目是基于 Google Web Toolkit (GWT) 开发的一个示例应用,用于演示 ...

    GWT-EXT2.0最佳实践教程,源代码打包供下载

    《GWT-EXT2.0最佳实践教程》源代码打包下载资源主要涵盖了Google Web Toolkit (GWT) 和EXT-JS 2.0的结合使用,提供了丰富的实践案例和示例代码,旨在帮助开发者深入理解和应用这两项技术。GWT是一款强大的JavaScript...

Global site tag (gtag.js) - Google Analytics