HTML 标签未反映在 Gxt Grid 中

HTML tags are not reflected in Gxt Grid

我有一个 GXT 网格,我在其中应用 html 标记以突出显示单词 "defining" 中的文本 "def"。但是它没有将 as 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;
}

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

像这样的东西应该可以工作:

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()));
         }
       }
     }
   });

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

希望对您有所帮助。

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 传递到下面的循环,并在行数上迭代它。您可以使用列数和行数来获取单元格。拿到cell元素后,就可以设置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));
            }
        }
    }