带I18N GWT的TreeItem

带I18N GWT的TreeItem,gwt,tree,history,token,gwt-history,Gwt,Tree,History,Token,Gwt History,我想知道如何用I18N构建一个TreeItem,而不为一个菜单项使用不同的标记 如果我像这样构建一个树: @UiField Tree tree; TreeItem customer = new TreeItem(customerGroup"); customer.addItem("searchCustomer"); customer.addItem("create"); customer.setState(true);

我想知道如何用I18N构建一个TreeItem,而不为一个菜单项使用不同的标记

如果我像这样构建一个树:

 @UiField
    Tree tree;

    TreeItem customer = new TreeItem(customerGroup");
       customer.addItem("searchCustomer");
       customer.addItem("create");
       customer.setState(true);

                            tree.clear();
   tree.addItem(customer);


                  @UiHandler("tree")
  public void onSelection(SelectionEvent<TreeItem> event) {
    eventBus.fireEvent(event);
   }
@UiField
树木;
TreeItem customer=新的TreeItem(customerGroup”);
客户。添加项(“搜索客户”);
customer.addItem(“创建”);
customer.setState(true);
tree.clear();
tree.addItem(客户);
@UiHandler(“树”)
选举时公共无效(SelectionEvent事件){
eventBus.fireEvent(事件);
}
当用户单击“创建”节点时,我得到的ValueChange令牌是“创建”,然后我得到如下代码

 public void onValueChange(ValueChangeEvent<String> event) {
  String token = event.getValue();
     if(token.equals("create") 
    {
    CreateCustomerView create = new CreateCustomerView(eventBus,
         customerService);
       content.setContent(create);
    } 
ValueChange上的公共作废(ValueChangeEvent事件){
字符串标记=event.getValue();
if(令牌等于(“创建”)
{
CreateCustomerView create=新建CreateCustomerView(事件总线,
客户服务);
content.setContent(创建);
} 


但是,如果我想在TreeItem节点中使用不同的语言,那么我需要文本以外的东西作为标记,也许是一个id。我可以用MVP模式中的Places模式来解决这个问题吗?如果是这样的话,它是如何工作的?

关于
TreeItem
有两种方法
setUserObject(Object-userObject)
getUserObject
。您可以使用它们来创建或设置一个Id,您可以使用它进行检查。但是,我不知道如何从
SelectionEvent
ValueChangeEvent
。在这两者之间会丢失一些信息。

为什么不比较附加到
SelectionEvent
的所选项目>使用您之前添加的项目?类似以下内容:

public void onModuleLoad() {
    Tree tree = new Tree();
    final TreeItem item1 = new TreeItem("item 1");
    TreeItem item2 = new TreeItem("item 2");
    TreeItem item3 = new TreeItem("item 3");
    TreeItem item4 = new TreeItem("item 4");

    tree.addItem(item1);
    tree.addItem(item2);
    tree.addItem(item3);
    tree.addItem(item4);

    tree.addSelectionHandler(new SelectionHandler<TreeItem>() {

        @Override
        public void onSelection(SelectionEvent<TreeItem> event) {
            if (event.getSelectedItem().equals(item1)) {
                Window.alert("item1 selected");
            }
        }
    });

    RootPanel.get().add(tree);
}
模块加载()上的公共void{
树=新树();
最终树项目1=新树项目(“项目1”);
TreeItem2=新的TreeItem(“项目2”);
TreeItem3=新的TreeItem(“项目3”);
TreeItem4=新的TreeItem(“项目4”);
树。附加项(第1项);
树。附加项(第2项);
附加项(第3项);
附加项(第4项);
addSelectionHandler(新的SelectionHandler(){
@凌驾
选举时公共无效(SelectionEvent事件){
if(event.getSelectedItem().equals(item1)){
窗口。警报(“选中项目1”);
}
}
});
RootPanel.get().add(树);
}

还是我遗漏了什么?

eventBus.fireEvent(event);在树中激发一个SelectionEvent,它由另一个类中的onValueChange事件拾取感谢Hilbrand,您的解决方案起作用了。创建树Item时设置userObject,从onSelection事件方法创建histroyToken时拾取它。