在GWT中的viewImpl和place之间传递bean

在GWT中的viewImpl和place之间传递bean,gwt,Gwt,我正在使用MVP架构,并试图在GWT cellTAble上跟踪单击事件 1.我有一个ConfigureViewImpl类,它将ConfigurePlace作为一个位置 2.ValidationViewImpl类,该类将ValidationPlace作为一个位置 我在ConfigueViewImpl中有一个表。单击其中一列时,另一个位置(ValidationPlace)应该到达,以便导航到其他页面。但我必须跟踪特定行的单击事件。 为此,我试图通过豆子,但没有任何成功 final CellT

我正在使用MVP架构,并试图在GWT cellTAble上跟踪单击事件

1.我有一个ConfigureViewImpl类,它将ConfigurePlace作为一个位置

2.ValidationViewImpl类,该类将ValidationPlace作为一个位置

我在ConfigueViewImpl中有一个表。单击其中一列时,另一个位置(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());
        }
    }); 
final-CellTable-configGrid=new-CellTable(5,(资源)GWT.create(TableResources.class));
最终SingleSelectionModel selectionModel=新的SingleSelectionModel();
claimsGrid.setSelectionModel(selectionModel,
DefaultSelectionEventManager.createDefaultManager());
列操作=新列(new ButtonCell()){
@凌驾
公共字符串getValue(UserBean对象){
//从选择模型中获取值。
返回“images/edit.png”;
}
};  
configGrid.addColumn(操作,“操作”);
action.setFieldUpdater(新的FieldUpdater(){
公共void更新(int索引、UserBean对象、字符串值){
//需要传递bean“object”
goTo(新的ValidationPlace());
}
}); 

我需要将“UserBean对象”作为参数传递给ValidationPlace()但是GWT不允许传递bean参数,因为它只允许字符串作为令牌。是否有一种方法可以跟踪单击事件并将信息传递到下一页。任何建议都非常感谢。提前感谢。

您就快到了-您只需将bean传递到您的位置,然后从中生成令牌

像这样的

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;
}
public类ValidationPlace扩展了位置{
私有最终用户bean用户bean;
公共验证位置(UserBean UserBean){
this.userBean=userBean;
}
公共UserBean getUserBean(){
返回userBean;
}
公共静态类标记器实现PlaceTokenizer{
@凌驾
公共字符串getToken(ValidationPlace){
返回“name=“+userBean.getName()”;
}
@凌驾
公共ValidationPlace getPlace(字符串标记){
//将令牌解析到用户bean中并返回新位置
返回新的ValidationPlace(createFromToken(token));
}
}
}
公共静态最终UserBean createFromToken(字符串标记){
映射参数=simpleParse(令牌);
返回新的UserBean(params.get(“name”)、params.get(“xyz”)、…);
}
公共静态最终映射simpleParse(字符串标记){
Map Map=newhashmap();
if(令牌!=null){
字符串[]params=token.split(&);
for(字符串参数:params){
字符串[]keyValues=param.split(“”);
如果(keyValues.length>1){
map.put(keyValues[0],keyValues[1]);
}
}
}
返回图;
}

参数解析非常简单,不处理转义、&、=等,但通常就足够了。

Thanx for reply Pauli,但我需要使用ValidationPlace将整个bean发送到ValidtazionViewImpl。如果我没有错,在示例中,您只传递了一个参数。另外,什么是createFromToken(令牌)?这只是一个示例-您必须“序列化”所有参数,然后编写一个函数(我称之为createFromToken())以从令牌重新创建bean。我觉得这可能不是你想要的-看起来你可能有一些巫师的事情在进行。您可能需要将bean存储在两个页面共享的模型中,然后将唯一引用作为令牌传递给该bean,验证页面可以从模型中加载bean。您还需要处理上下文外引用的页面-例如,如果有人将该页面添加为书签。Thanx Pauli。您能给我序列化概念的引用页面吗?这正是我想要的。因为我是GWT初学者,我不知道GWT中的序列化概念。我试图在ValidationPlace()。我还需要为每个参数生成标记。?Serialise是一个错误的词-tokenise是我的意思。“官方”裁判在这里。恐怕要做“标记化”你就得靠自己了。我已经包括了一个我使用的简单imlp。