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));
}
}
}
我有一个 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));
}
}
}