【问题标题】:HTML tags are not reflected in Gxt GridHTML 标签未反映在 Gxt Grid 中
【发布时间】:2017-03-20 22:02:43
【问题描述】:

我有一个 GXT 网格,我在其中应用 html 标记来突出显示单词“defining”中的文本“def”。但它不将其视为 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;
}

【问题讨论】:

  • 您能展示一下您是如何使用doHighlight 方法在GXT Grid 中绘制的吗?如果它是值提供者的一部分,或者在单元格等中,以便我可以更轻松地显示在哪里更改?

标签: java html gwt gxt


【解决方案1】:

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

这样的事情应该可以工作:

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

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

希望对您有所帮助。

【讨论】:

    【解决方案2】:
    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 传递给下面的循环并在行数上迭代它。您可以使用列数和行数获取单元格。获取单元格元素后,就可以设置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));
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多