在viewImpl和GWT之间传递bean

时间:2011-10-12 10:15:24

标签: gwt

我正在使用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事件并传递信息到下一页。任何建议赞赏。谢谢。

1 个答案:

答案 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;。,=等,但通常就足够了。