Я делаю свое собственное приложение, используя GWT framework. Я говорю, что многие Class не поддерживаются (например, Calendar, Connection, Statement, DriverManager, ResultSet и т. Д.), Но я могу использовать его (они работают).
Это нормально? :) А стоит ли их заменить?
ПРИМЕР:
при запуске приложения оно загружает часть FlowPanel с некоторыми кнопками. Когда я нажимаю на кнопку menu_login_button, я выполняю асинхронный вызов
package org.sinfonet.client;
public class PageMenuLogin extends FlowPanel {
private PageCenter center;
public PageMenuLogin(PageCenter center) {
this.center=center;
designLogin();
}
public void designLogin() {
final InlineLabel menu_login_label1=new InlineLabel("Username");
menu_login_label1.setStyleName("menu_span");
this.add(menu_login_label1);
final TextBox menu_login_input1 = new TextBox();
menu_login_input1.setText("admin");
this.add(menu_login_input1);
final InlineLabel menu_login_label2=new InlineLabel("Password");
menu_login_label2.setStyleName("menu_span");
this.add(menu_login_label2);
final TextBox menu_login_input2 = new TextBox();
menu_login_input2.setText("pass");
this.add(menu_login_input2);
Button menu_login_button=new Button("Login");
this.add(menu_login_button);
PageMenuLogin.this.center.getContent().clear();
PageMenuLogin.this.center.getContent().add(new TitleContent("Homepage"));
PageMenuLogin.this.center.getContent().add(new Main());
final AsyncCallback<java.lang.Boolean> callCheckLogin = new AsyncCallback<java.lang.Boolean>() {
public void onSuccess(Boolean result) {
if(result) {
designLogout(menu_login_input1.getText());
} else {
menu_err.setText("Username e password non validi");
}
}
public void onFailure(Throwable caught) {
menu_login_label1.setText("Comunicazione Fallita");
}
};
menu_login_button.addClickHandler(new ClickHandler(){
public void onClick(ClickEvent event) {
getService().checkLogin(menu_login_input1.getText(), menu_login_input2.getText(), callCheckLogin);
}
});
}
public void designLogout(String login_user) {
PageMenuLogin.this.center.getContent().add(new Profile(login_user));
}
public static GWTServiceAsync getService() {
return GWT.create(GWTService.class);
}
}
прямо сейчас, под вы можете увидеть асинхронный вызов, где (как вы сказали) я могу поместить все виды серверных вызовов (база данных, набор результатов, оператор, ecc)
package org.sinfonet.server;
public class GWTServiceImpl extends RemoteServiceServlet implements GWTService {
public boolean checkLogin(String nickname, String password) {
Database mydb=Configuration.getDatabase();
mydb.connetti();
// faccio md5 ed escape
String log_check_user=nickname;
String log_check_pass=password;
// controllo che l'utente esista
ArrayList<String[]> db_result=null;
db_result=mydb.selectQuery("SELECT nickname FROM users WHERE nickname='"+log_check_user+"' AND password='"+log_check_pass+"'");
if(db_result.size()!=0) {
return true;
}
// sconnessione al database
mydb.disconnetti();
return false;
}
}
если функция возвращает true, я могу загрузить класс Profile (который на стороне клиента).
package org.sinfonet.client.profile;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.InlineLabel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import org.sinfonet.server.mgmt.Configuration;
import org.sinfonet.server.mgmt.Database;
public class Profile extends FlowPanel {
private String[] record;
private String value;
private TextBox field_1, field_2, field_3, field_4, field_5;
private TextArea field_A;
private FlowPanel profilo_1=new FlowPanel();
private FlowPanel profilo_2=new FlowPanel();
private FlowPanel profilo_3=new FlowPanel();
private FlowPanel pm_inbox=new FlowPanel();
private FlowPanel pm_outbox=new FlowPanel();
private FlowPanel pm_button=new FlowPanel();
public Profile(String value) {
// memorizzo nome utente
this.value=value;
// imposto div principale
this.setStyleName("content_span");
profilo_1.setStyleName("profilo_1");
profilo_2.setStyleName("profilo_2");
profilo_3.setStyleName("profilo_3");
pm_inbox.setStyleName("pm_cont1");
pm_outbox.setStyleName("pm_cont2");
pm_button.setStyleName("pm_but");
this.add(profilo_1);
this.add(profilo_2);
this.add(profilo_3);
designMainProfile();
}
public final void designMainProfile() {
Database mydb=Configuration.getDatabase();
mydb.connetti();
mydb.disconnetti();
}
}
Если я хорошо понимаю, я не могу вызывать функции базы данных при загрузке профиля (потому что это клиентский класс).
Итак, как я могу это исправить? Я делаю асинхронный вызов при загрузке профиля?