JSF вопрос о космосе - PullRequest
       7

JSF вопрос о космосе

0 голосов
/ 27 сентября 2011

Я - зеленая птица в JSF, теперь я озадачен ее текстом.

когда я присваиваю значение outputText с несколькими пробелами, результат, показанный в IE, имеет только один пробел.

ex: код похож на

<h:outputText id="name" value="aa (multi-spaces here)  bbb" ></h:outputText>

текст результата, отображаемый в IE, является "aa bbb"

Может кто-нибудь сказать мне, почему пробелы исчезают без следа?

1 Ответ

2 голосов
/ 27 сентября 2011

Это поведение определяется спецификацией HTML:

Для всех элементов HTML, кроме PRE, последовательности пробелов разделяют «слова» (здесь мы используем термин «слово» для обозначения «последовательностей непробельных символов»). При форматировании текста пользовательские агенты должны идентифицировать эти слова и размещать их в соответствии с соглашениями конкретного письменного языка (сценария) и целевого носителя.

Обратите внимание, что при использовании XHTML есть некоторые различия в способах обработки атрибутов и кодовой точки U + 000C .

Для большей части текста последовательности пробелов не отображаются иначе, чем один пробел.


Поскольку это элемент управления outputText, вы можете использовать односторонний преобразователь для решения без перерывов:

package myconverters;
// imports

public class SpacePreserver implements Converter {
  private static final char NO_BREAK_SPACE = '\u00A0';

  public String getAsString(FacesContext context, UIComponent component,
      Object value) {
    if (component instanceof EditableValueHolder) {
      throw new IllegalArgumentException(
          "Cannot use SpacePreserver converter on editable controls.");
    }
    return value == null ? null : value.toString().replace(' ', NO_BREAK_SPACE);
  }

  public Object getAsObject(FacesContext context, UIComponent component,
      String value) {
    throw new UnsupportedOperationException("Output converter only");
  }
}

Это может быть определено (среди прочих способов) с помощью записи Face-config.xml:

<converter>
  <converter-id>spacePreserver</converter-id>
  <converter-class>myconverters.SpacePreserver</converter-class>
</converter>

Затем вы можете добавить это к своему выходному элементу управления:

<h:outputText id="text1" value="a   b c" converter="spacePreserver" />

Этот код был протестирован с использованием JSF 1.1 и представления JSP 2.0 в кодировке UTF-8. Обратите внимание, что использование пробела без перерывов запрещает перенос строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...