Ответ 1
Он должен быть действительным 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. Они также не могут начинаться с дефиса.