|
16.04.2013, 10:04:11
#38227040
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
Здравствуйте коллеги. Я использую в своём проекте библиотеки netty и apache wicket. Подскажите как сделать так чтобы когда на странице регистрации, написанной на wicket, когда пользователь жмет на кнопку зарегистрироваться страница не переходила на другую пока не получит ответ от сервера в методе messageReceived() класса ClientHandler.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117.
public class RegistrationPage extends BasePage {
private final TextField<String> login;
private final PasswordTextField password;
private final TextField<String> surname;
private final TextField<String> name;
private final TextField<String> patronymic;
private final EmailTextField email;
private final TextField<String> country;
private final TextField<String> city;
public RegistrationPage() {
add(new FeedbackPanel("feedback"));
login = new TextField<String>("Логин", Model.of(""));
login.setRequired(true);
password = new PasswordTextField("Пароль", Model.of(""));
password.setRequired(true);
final PasswordTextField confirmPassword = new PasswordTextField("Подтвердите пароль", Model.of(""));
confirmPassword.setRequired(true);
surname = new TextField<String>("Фамилия", Model.of(""));
surname.setRequired(true);
name = new TextField<String>("Имя", Model.of(""));
name.setRequired(true);
patronymic = new TextField<String>("Отчество", Model.of(""));
email = new EmailTextField("E-Mail", Model.of(""));
email.setRequired(true);
email.add(EmailAddressValidator.getInstance());
country = new TextField<String>("Страна", Model.of(""));
city = new TextField<String>("Город", Model.of(""));
Form register = new Form("registrationForm") {
protected void onSubmit() {
checkValues();
executeRequest();
PageParameters parameters = new PageParameters();
setResponsePage(ResultRegistrationPage.class, parameters.add("result", "YES!!!"));
}
};
add(register);
register.add(login);
register.add(password);
register.add(confirmPassword);
register.add(new EqualPasswordInputValidator(password, confirmPassword));
register.add(surname);
register.add(name);
register.add(patronymic);
register.add(email);
register.add(country);
register.add(city);
}
private void checkValues() {
String userLogin = login.getModelObject();
if (userLogin.length() <= 2)
login.error("Недопустимый логин. Логин должен содержать не менее 4 символов.");
if (userLogin.length() >= 21)
login.error("Недопустимый логин. Логин должен содержать не более 20 символов.");
Pattern templateLogin = Pattern.compile("^[A-Za-zА-Яа-я]{1}[A-Za-zА-Яа-я0-9-_\\.']{4,20}$");
if (!templateLogin.matcher(userLogin).matches())
login.error("Недопустимый логин. Логин должен состоять из латинских символов, цифр, дефиса, нижниго подчеркивания или точки, начинаться с буквы и заканчиваться буквой или цифрой.");
String passwordUser = password.getModelObject();
if (passwordUser.length() < 6)
password.error("Слишком короткий пароль.");
if (passwordUser.length() >= 21)
password.error("Слишком длинный пароль (нельзя более 20 символов).");
Pattern templatePassword = Pattern.compile("^[A-Za-zА-Яа-я\\d!@#;%:&*-_,\\Q$^()+.\\E]{6,20}$");
if (!templatePassword.matcher(passwordUser).matches())
password.error("В пароле указаны недопустимые символы.");
Pattern templateTextField = Pattern.compile("^[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я-_'\\. ]{2,}$");
String surnameUser = surname.getModelObject();
if (surnameUser.length() <= 2)
surname.error("Поле 'Фамилия' должно содержать не менее 2 символов.");
if (!templateTextField.matcher(surnameUser).matches())
surname.error("Поле 'Фамилия' содержит не допустимые символы.");
String nameUser = name.getModelObject();
if (nameUser.length() <= 2)
name.error("Поле 'Имя' должно содержать не менее 2 символов.");
if (!templateTextField.matcher(nameUser).matches())
name.error("Поле 'Имя' содержит не допустимые символы.");
if (patronymic.getModelObject() != null) {
String patronymicUser = patronymic.getModelObject();
if (patronymicUser.length() <= 2)
patronymic.error("Поле 'Фамилия' должно содержать не менее 2 символов.");
if (!templateTextField.matcher(patronymicUser).matches())
patronymic.error("Поле 'Фамилия' содержит не допустимые символы.");
}
if (country.getModelObject() != null) {
String countryUser = country.getModelObject();
if (countryUser.length() <= 2)
country.error("Поле 'Страна' должно содержать не менее 2 символов.");
if (!templateTextField.matcher(countryUser).matches())
country.error("Поле 'Страна' содержит не допустимые символы.");
}
if (city.getModelObject() != null) {
String cityUser = city.getModelObject();
if (cityUser.length() <= 2)
city.error("Поле 'Город' должно содержать не менее 2 символов.");
if (!templateTextField.matcher(cityUser).matches())
city.error("Поле 'Город' содержит не допустимые символы.");
}
}
private void executeRequest() {
HashMap<String, Object> parameters = new HashMap<String, Object>();
parameters.put("login", login.getModelObject());
parameters.put("password", password.getModelObject());
parameters.put("surname", surname.getModelObject());
parameters.put("name", name.getModelObject());
parameters.put("patronymic", patronymic.getModelObject());
parameters.put("email", email.getModelObject());
parameters.put("country", country.getModelObject());
parameters.put("city", city.getModelObject());
PacketRequest request = new PacketRequest("commands.CreateUserCommand", parameters);
Client client = new Client();
client.sendPackage(request);
//client.stop();
}
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
public class Client {
private static final Logger log = Logger.getLogger(Client.class);
private ClientBootstrap bootstrap;
private Channel connector;
public Client() {
ExecutorService bossExecutor = new OrderedMemoryAwareThreadPoolExecutor(1, 400000000, 2000000000, 60, TimeUnit.SECONDS);
ExecutorService ioExecutor = new OrderedMemoryAwareThreadPoolExecutor(4, 400000000, 2000000000, 60, TimeUnit.SECONDS);
ChannelFactory factory = new NioClientSocketChannelFactory(bossExecutor, ioExecutor, 4);
bootstrap = new ClientBootstrap(factory);
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
@Override
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(new ClientDecoder(), new ClientEncoder(), new ClientHandler());
}
});
ChannelFuture future = bootstrap.connect(new InetSocketAddress("localhost", 8089));
if (!future.awaitUninterruptibly().isSuccess()) {
log.warn("Could not connect to the server with the address localhost:8089.");
bootstrap.releaseExternalResources();
}
connector = future.getChannel();
if (connector.isConnected()) {
log.info("Successfully connected to the server with the address localhost:8089.");
} else {
log.warn("Could not connect to the server with the address localhost:8089.");
}
}
public void sendPackage(PacketRequest request) {
if (connector.isConnected()) {
connector.write(request);
} else {
log.warn("Interrupted by connecting to the server with the address localhost:8089.");
}
}
public void stop() {
if (connector != null)
connector.close().awaitUninterruptibly();
bootstrap.releaseExternalResources();
log.info("The client is stopped.");
}
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
public class ClientHandler extends SimpleChannelUpstreamHandler {
private static final Logger log = Logger.getLogger(ClientHandler.class);
public ClientHandler() {
}
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
log.info("The connection to the server " + e.getChannel().getRemoteAddress() + ".");
}
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
System.out.println(((PacketResponse) e.getMessage()).getResult());
}
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
log.warn("Exception caught: ", e.getCause());
if (e.getChannel().isConnected()) {
e.getChannel().close();
} else {
ctx.getChannel().close();
}
}
}
|
|
|