HTML标记不会反映在Gxt Grid中

时间:2017-03-15 12:49:35

标签: java html html5 gwt gxt

我有一个GXT网格,我正在应用html标签来突出显示文本&#34; def&#34;在单词&#34;定义&#34;。但不是将其作为HTML标记,而是将其视为字符串并将输出显示为<mark>def</mark>ining。你能帮我解决这个问题吗?

private static String doHighlight(String dtoData){ //dtoData is "defining"
    int dtoLength = dtoData.length();
    int i = -1;
    String newDtoData = null;
    String finalDtoData = null;
    String highlightStartTag = "<mark>";
    String highlightEndTag = "</mark>";

    if (dtoData != null && dtoData != "") {
        i = dtoData.toLowerCase().indexOf("def", i+1);
        if(i<0){
            finalDtoData = dtoData;
        }else{
            newDtoData = highlightStartTag +dtoData.substring(0, i) + dtoData.substring(i, "def".length()) + highlightEndTag;
            finalDtoData = newDtoData + dtoData.substring("def".length(), dtoLength);
            i = -1;
        }
    }
    return finalDtoData;
}

2 个答案:

答案 0 :(得分:2)

因为要求与布局有关,所以我个人会在网格的那一列使用一个单元格。

这样的事情应该有效:

myColumn.setCell(new AbstractCell<String>() {
      @Override
      public void render(Context context,
                         String value,
                         SafeHtmlBuilder sb) {
        if (value != null && value != "") {
          int i = value.toLowerCase().indexOf("def");
          if (i < 0) {
            sb.append(value);
          } else {
            sb.appendHtmlConstant("<mark>")
              .append(value.substring(0, i))
              .append(value.substring(i, "def".length()))
              .appendHtmlConstant("</mark>")
              .append(value.substring("def".length(), value.length()));
         }
       }
     }
   });

当然,这不完整,但它应该让你知道如何解决它。

希望有所帮助。

答案 1 :(得分:1)

private static Map<Integer, String> findMatches(String searchText, String dtoValue, int rowCount) {    
Map<Integer,String> matchesMap = new HashMap<Integer,String>();
if (dtoValue != null && dtoValue != "") {
        i = dtoValue.toLowerCase().indexOf(searchText, i+1);
        if(i>=0){
            newDtoData = dtoValue.replaceAll(searchText, "<span style='background-color: yellow; !important'>"+searchText+"</span>");
            matchesMap.put(rowCount, newDtoData);
            i = -1;
        }
    }
    return matchesMap;

将上面的matchesMap传递给下面的循环并在rowcount上迭代它。您可以使用列数和行数来获取单元格。获取单元格元素后,您可以设置innerHTML。

for(int rowId:matchesMap.keySet()){
        if(!matchesMap.get(rowId).isEmpty()){
            Element cellElement = viewComponent.getView().getCell(rowId, columnId); 
            if(cellElement != null){
                cellElement.setInnerHTML(matchesMap.get(rowId));
            }
        }
    }