我正在使用MVP架构并尝试跟踪GWT cellTAble上的click事件。
1.我有一个ConfigureViewImpl类,其中ConfigurePlace为Place。
2.ValidationViewImpl类,其ValidationPlace为Place。
我在ConfigueViewImpl中有一个表。单击其中一个列,另一个地方(ValidationPlace)应该到达以便导航到其他页面。但是我必须跟踪特定行的单击事件。 为此,我试图通过Bean,但没有任何成功。
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对象'作为参数传递给ValidationPlace(),但是GWT不允许传递bean参数,因为它只允许String作为标记。我有一种方法可以跟踪click事件并传递信息到下一页。任何建议赞赏。谢谢。
答案 0 :(得分:2)
你几乎就在那里 - 你只需要将你的豆子传递到你的位置,然后从中生成一个令牌。
像这样的东西
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("&");
for (String param : params) {
String[] keyValues = param.split("=");
if (keyValues.length > 1) {
map.put(keyValues[0], keyValues[1]);
}
}
}
return map;
}
参数解析非常幼稚,不会处理转义,&amp;。,=等,但通常就足够了。