使用嵌套的小部件/ html更改GWT HTMLpanel内的文本

时间:2014-08-26 12:31:23

标签: gwt uibinder

我正在使用带GWT的UiBinder。我有一个HTML面板,里面有一堆小部件和HTML元素。我需要更改父HTMLpanel内的文本以反映用户的性别(他对她的类型)。我需要更改的所有文本都在不同的div元素内(不在任何小部件内)但不是相同的div。这是一个例子

<g:HTMLPanel ui:field="parentWidget">
 <div>I think he is currently in a meeting.</div>
 <my:widget>stuff</my:widget>
 <div>I will have him call you when he gets out</div>
</g:HTMLPanel>

我用代词进行每个div,需要更改为GWT小部件,然后在代码中逐个更改它们,但现在文本已经增长,我想要一种更简单的方法来实现它。

我试过了

parentWidget.getElement.setInnerHTML(parentWidget.getElement.getInnerHTML().replaceAll(...)

但是我觉得它没有用。

任何建议

1 个答案:

答案 0 :(得分:1)

正如其他人所建议的那样,GWT的消息界面是继续前进的理想方式。但是如果你想使用字符串替换技术,你可以执行以下操作:

NodeList<Node> childNodes = parentWidget.getElement().getChildNodes();
for(int i=0;i<childNodes.getLength(); i++){
    Node node = childNodes.getItem(i);
    if(Node.ELEMENT_NODE==node.getNodeType()){
        Element nodeEle = (Element)node;
        //use replaceAll or replace according to the requirement
        nodeEle.setInnerText(nodeEle.getInnerText().replaceAll("\\bhe\\b","she"));
    }
}

这样,您可以通过仅修改文本来防止覆盖父窗口小部件中显示的元素(即仅在文本上使用replaceAll / replace)。