Каковы правила для идентификатора JSF? - PullRequest
14 голосов
/ 12 мая 2011

Кажется, я смог бы найти это за полчаса поиска в сети, но так как я не могу:

Каковы правила для действительных идентификаторов JSF?

Я прочитал искаженное сообщение электронной почты, в котором говорилось, что существуют ограничения для - и _, но я получаю IllegalArgumentExceptions и думаю, что это из-за идентификаторов.

EDIT

java.lang.IllegalArgumentException: 6a945017207d46fd82b3d3bb7d2795f1
at javax.faces.component.UIComponentBase.validateId(UIComponentBase.java:549)
at javax.faces.component.UIComponentBase.setId(UIComponentBase.java:351)
at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:151)

1 Ответ

18 голосов
/ 12 мая 2011

Это должен быть действительный идентификатор CSS (* ident здесь ), и не должно быть дубликатов.

В CSS идентификаторы (включая имена элементов, классы и идентификаторы в селекторах ) могут содержать только символы [a-zA-Z0-9] и ISO 10646 символов U+00A1 и выше, плюс дефис (- ) и подчеркивание (_); они не могут начинаться с цифры или с дефиса, за которым следует цифра. Идентификаторы также могут содержать экранированные символы и любые символы ISO 10646 в виде числового кода (см. Следующий пункт). Например, идентификатор "B&W?" может быть записан как "B\&W\?" или "B\26 W\3F".

Смотри также:


Обновление : для интересующего вас случая вот исходный код валидатора, предоставленный UIComponentBase#validateId():

private static void validateId(String id) {
    if (id == null) {
        return;
    }
    int n = id.length();
    if (n < 1) {
        throw new IllegalArgumentException("Empty id attribute is not allowed");
    }
    for (int i = 0; i < n; i++) {
        char c = id.charAt(i);
        if (i == 0) {
            if (!Character.isLetter(c) && (c != '_')) {
                throw new IllegalArgumentException(id);
            }
        } else {
            if (!Character.isLetter(c) &&
                    !Character.isDigit(c) &&
                    (c != '-') && (c != '_')) {
                throw new IllegalArgumentException(id);
            }
        }
    }
}

Однако он немного более строг, чем правила CSS. Они также не могут начинаться с дефиса.

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