XML Специальные символы в Табрисе должны быть экранированы?

В нашем приложении мы получаем уродливое исключение (синтаксический анализатор) при наличии строки, содержащей символ, такой как &.

Сейчас мы заменим эти символы с помощью StringEscapeUtils.escapeXml(aLabel). Это правильный путь, потому что метка в нашем tableView показывает экранированный символ вместо чистой &

Спасибо Винсент

3 ответа

Символ '&' используется для мнемоники в SWT/RAP/Tabris. Они обычно используются для обозначения символа в меню или кнопки подчеркиванием для навигации с помощью клавиатуры. На клиентах Tabris для iOS и Android мы не отображаем мнемонику, поскольку у нас нет навигации по клавиатуре, как на рабочем столе, но они не должны вызывать проблем, если они установлены.

Итак, где же происходит это исключение? На сервере Android или iOS клиент?

Джорди, исключение происходит на сервере в методе getColumnText.

public String getColumnText( Object element, int columnIndex ) {
      return text;
}

Исключение происходит, когда текст представляет собой строку, содержащую '&', как в "Billy & Jean"

Это исключение:

Произошло исключение

java.lang.IllegalArgumentException: Failed to parse markup text at    org.eclipse.swt.internal.widgets.MarkupValidator.validate(MarkupValidator.java:60)    at org.eclipse.swt.widgets.TreeItem.setText(TreeItem.java:978)  at org.eclipse.jface.viewers.TreeViewerRow.setText(TreeViewerRow.java:176) at org.eclipse.jface.viewers.ViewerCell.setText(ViewerCell.java:162) at org.eclipse.jface.viewers.TableColumnViewerLabelProvider.update(TableColumnViewerLabelProvider.java:70)  at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:155)    at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:935)   at org.eclipse.jface.viewers.AbstractTreeViewer$UpdateItemSafeRunnable.run(AbstractTreeViewer.java:103)     at org.eclipse.jface.util.SafeRunnable$1.run(SafeRunnable.java:130)     at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:177)

Исключение, которое вы видите, не приходит из Табри. Это происходит от RAP. Я предполагаю, что вы используете tree/table.setData( RWT.MARKUP_ENABLED, Boolean.TRUE); право?

При использовании разметки допускается только подмножество HTML, см. http://download.eclipse.org/rt/rap/doc/2.2/guide/reference/api/org/eclipse/rap/rwt/RWT.html

Итак, когда вы используете разметку и хотите иметь символ &, вам нужно использовать его сущность: &

Но обратите внимание: базовая разметка поддерживается только в Tabris с версией 1.4 (выпуск 2014 г., 26 июня)

Другие вопросы по тегам