В качестве метки сообщения по умолчанию используется идентификатор клиента компонента, именно тот, который вы видите в сгенерированном выводе HTML с помощью щелчка правой кнопкой мыши, Просмотр источника . В данном конкретном случае j_id7
является идентификатором клиента родительского элемента <form>
. Если вы дадите компоненту JSF фиксированный идентификатор, например <h:form id="login">
, тогда метки станут login:UserId
и login:Password
соответственно.
Однако вы можете использовать атрибут label
компонента ввода, чтобы полностью переопределить его, чтобы метка сообщения отображалась именно так, как вы намеревались.
<h:inputText ... label="User ID" />
<h:inputSecret ... label="Password" />
Если присутствует атрибут label
компонента ввода, то он будет использоваться вместо идентификатора клиента. Использование prependId="false"
, как предлагают другие ответы, имеет недостатки . Не делай этого.
Совершенно другая альтернатива - использовать для этого атрибут requiredMessage
(или converterMessage
или validatorMessage
), но это не позволяет параметризовать сообщения, и, следовательно, вам придется жестко кодировать метки и тому подобное.
<h:inputText ... label="User ID is required." />
<h:inputSecret ... label="Password is required." />
Смотри также:
Следует отметить, что действительно неудобно дублировать метки, например:
<h:outputLabel for="userId" value="User ID" ... />
<h:inputText id="userId" ... label="User ID" />
<h:outputLabel for="password" value="Password" ... />
<h:inputSecret id="password" ... label="Password" />
Если вы используете библиотеку утилит JSF OmniFaces , то вы можете использовать <o:outputLabel>
, чтобы JSF прозрачно установил атрибут label
соответствующего компонента:
<o:outputLabel for="userId" value="User ID" ... />
<h:inputText id="userId" ... />
<o:outputLabel for="password" value="Password" ... />
<h:inputSecret id="password" ... />