#gwt
#gwt
Вопрос:
Я использую архитектуру MVP и пытаюсь отслеживать событие щелчка в таблице ячеек GWT.
1. У меня есть один класс ConfigureWiewImpl, который имеет ConfigurePlace в качестве места.
2.Класс ValidationViewImpl, который имеет ValidationPlace в качестве места.
У меня есть одна таблица в configureviewimpl.При щелчке по одному из его столбцов должно появиться другое место (ValidationPlace), чтобы перейти на другую страницу.Но я должен отслеживать событие щелчка по конкретной строке. Для этого я пытаюсь передать компонент, но без какого-либо успеха.
final CellTable<UserBean> configGrid= new CellTable<UserBean>(5,(Resources) GWT.create(TableResources.class));
final SingleSelectionModel<UserBean> selectionModel = new SingleSelectionModel<UserBean>();
claimsGrid.setSelectionModel(selectionModel,
DefaultSelectionEventManager.<UserBean> createDefaultManager());
Column<UserBean, String> action = new Column<UserBean, String>(new ButtonCell()) {
@Override
public String getValue(UserBean object) {
// Get the value from the selection model.
return"images/edit.png";
}
};
configGrid.addColumn(action,"Action");
action.setFieldUpdater(new FieldUpdater<UserBean, String>() {
public void update(int index, UserBean object, String value) {
//need to pass the bean 'object'
listener.goTo(new ValidationPlace());
}
});
Мне нужно передать ‘UserBean object’ в качестве аргумента ValidationPlace(), но GWT не позволяет передавать параметры компонента, поскольку он допускает только строку в качестве токенов.Есть ли способ, с помощью которого я могу отслеживать событие щелчка и передавать информацию на следующую страницу.Любые предложения приветствуются.Заранее спасибо.
Ответ №1:
Вы почти на месте — вам просто нужно передать свои компоненты в свое место, а затем сгенерировать из них токен.
Что-то вроде этого
public class ValidationPlace extends Place {
private final UserBean userBean;
public ValidationPlace(UserBean userBean) {
this.userBean = userBean;
}
public UserBean getUserBean() {
return userBean;
}
public static class Tokenizer implements PlaceTokenizer<ValidationPlace> {
@Override
public String getToken(ValidationPlace place) {
return "name=" userBean.getName();
}
@Override
public ValidationPlace getPlace(String token) {
// parse token into user bean and return new place
return new ValidationPlace(createFromToken(token));
}
}
}
public static final UserBean createFromToken(String token) {
Map<String, String> params = simpleParse(token);
return new UserBean(params.get("name"), params.get("xyz"), ...);
}
public static final Map<String, String> simpleParse(String token) {
Map<String, String> map = new HashMap<String, String>();
if (token != null) {
String[] params = token.split("amp;");
for (String param : params) {
String[] keyValues = param.split("=");
if (keyValues.length > 1) {
map.put(keyValues[0], keyValues[1]);
}
}
}
return map;
}
Синтаксический анализ параметров очень наивен и не обрабатывает экранирование, amp; ., = и т.д., но в целом этого достаточно.
Комментарии:
1. Спасибо за ответ Паули, но мне нужно отправить весь компонент в ValidtazionViewImpl с помощью ValidationPlace. Если я не ошибаюсь, в примере вы передаете только один из параметров. Кроме того, что такое createFromToken(токен)?
2. Это был просто пример — вам нужно было бы «сериализовать» все параметры, а затем написать функцию (которую я вызвал createFromToken()), чтобы воссоздать компонент из токена. У меня такое чувство, что это может быть не то, что вам нужно — похоже, у вас может быть какой-то волшебный процесс. Возможно, вам нужно сохранить компонент в модели, совместно используемой двумя страницами, а затем передать уникальную ссылку на этот компонент в качестве токена, где страница проверки может загрузить компонент из модели. Вам также нужно будет справиться со страницей, на которую ссылаются вне контекста — например, если кто-то закладывает эту страницу в закладки.
3. Спасибо Паули. Можете ли вы дать мне справочную страницу концепции сериализации. Это именно то, что я хочу. Поскольку я новичок в GWT, я не знаю концепции сериализации в GWT. Я пытался передать весь компонент в качестве аргумента в ValidationPlace(). Также мне нужно генерировать токен для каждого параметра.?
4. Сериализация — неправильное слово — я имел в виду токенизацию. «Официальная» ссылка здесь code.google.com/webtoolkit/doc/latest /. … Боюсь, что для выполнения «токенизации» вы в значительной степени сами по себе. Я включил простой imlp, который я использую.