我创建了一个具有登录面板的小部件: 这是代码:
<!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">
<ui:style>
/* Add CSS here. See the GWT docs on UI Binder for more details */
</ui:style>
<g:VerticalPanel width="200px" height="auto">
<g:Label text="Username:" width="100%" height="auto" />
<g:TextBox ui:field="Username" width="100%" height="auto" />
<g:Label text="Password:" width="100%" height="auto"/>
<g:PasswordTextBox ui:field="Password" width="100%" height="auto" />
<g:Cell horizontalAlignment="ALIGN_RIGHT">
<g:Button text="Login" ui:field="button" height="25px"/>
</g:Cell>
</g:VerticalPanel>
</ui:UiBinder>
这是生成的类: 公共类LoginPanel扩展Composite实现HasText {
private static LoginPanelUiBinder uiBinder = GWT
.create(LoginPanelUiBinder.class);
interface LoginPanelUiBinder extends UiBinder<Widget, LoginPanel> {
}
public LoginPanel() {
initWidget(uiBinder.createAndBindUi(this));
}
@UiField
Button button;
@UiField
TextBox Username;
@UiField
PasswordTextBox Password;
public LoginPanel(String firstName) {
initWidget(uiBinder.createAndBindUi(this));
}
@UiHandler("button")
void onClick(ClickEvent e) {
Window.alert("Hello!");
}
public String getUsername() {
return Username.getText();
}
public String getPassword() {
return Password.getText();
}
@Override
public String getText() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setText(String text) {
// TODO Auto-generated method stub
}
}
我想在onModuleLoad上访问此类的click事件,以便我知道用户何时单击该按钮并已成功登录,因此我可以调用我创建的其他面板。这只是警报。
这是我第一次玩UiBinder,所以我可能会遗漏一些东西。
谢谢。
答案 0 :(得分:2)
所以您希望您的LoginPanel
在用户登录时通知您的主应用类?
这真是EventBus
的工作。看看您需要的确切用例(AuthenticatedEvent):How to use the GWT EventBus
答案 1 :(得分:2)
首先,您需要将用户名密码发送到服务器。您可以使用RPC来实现此目的。然后在RPC回调(onsuccess
)中,您可以显示UI的其余部分。
以下是您需要做的一个框架:
private AsyncCallback loginCallback = new AsyncCallback(){
public void onSuccess(){
// show ui here
}
public void onFailure(Throwable caught) {
Window.alert("debug: login failed, message from server: " + caught.getMessage());
}
}
@UiHandler("button")
void onClick(ClickEvent e) {
Window.alert("debug: Sending login data to server");
LoginServiceAsync loginAsync = ...
loginAsync.doLogin(getUsername(),getPasword(),loginCallback);
}
您需要使用GWT的RPC工具创建LoginService RPC服务。