Я попросил передать атрибуты в другом вопросе и обнаружил, что могу создать собственный рендерер для компонента <p:autocomplete>
, но проблема в том, что мой собственный рендеринг будет используется для каждого p: автозаполнения в моем проекте (на сайте). Поэтому я решил создать пользовательский компонент, который расширяет org.primefaces.component.autocomplete.AutoComplete
и добавляет необходимые атрибуты в текстовое поле.
Моя первоначальная мысль заключалась в том, чтобы добавить конструктор, но он не работает, потому что в этот момент карта атрибута равна нулю:
@FacesComponent("com.mycomponents.SiteSearch")
public class SiteSearch extends AutoComplete {
public SiteSearch() {
Map<String,Object> attrs = getAttributes();
attrs.put("x-webkit-speech", null);
attrs.put("x-webkit-grammer", "builtin:search");
attrs.put("onwebkitspeechchange", "this.form.submit();");
attrs.put("placeholder", "Enter a Search Term");
}
}
Моя другая мысль заключалась в том, чтобы оставить этот пользовательский компонент пустым (пустой класс), а затем указать собственный рендерер, который расширяет org.primefaces.component.autocomplete.AutoCompleteRenderer
и изменяет там атрибуты.
После того, как все сказано и сделано, мне просто нужен способ сохранить эти атрибуты отдельно от этого текстового поля, поэтому просто поместить собственный рендеринг в p: autoComplete не будет работать (если, возможно, я не могу использовать renderType = attribute для этого p: autoComplete?).