Использование тегов, связанных с начальной загрузкой, внутри компонента JSF2 h:inputText
Есть ли способ использовать теги, связанные с начальной загрузкой, в компонентах JSF2? Например, я заинтересован в использовании функции начальной загрузки начальной загрузки, которая требует что-то вроде
<h:inputText id="typeahead" type="text" data-provide="typeahead"></h:inputText>
но с тех пор data-provide
не существует для h:inputText
он удаляется, и поэтому функция typeahead явно не будет работать.
1 ответ
Зависит от используемой вами версии JSF.
В JSF 2.0/2.1 невозможно указать дополнительные атрибуты. Средства визуализации JSF HTML будут отображать только предопределенные атрибуты. Вам нужно создать пользовательский рендер, чтобы достичь желаемой работы. Чтобы свести к минимуму стандартный код, вы должны расширить рендерер для конкретной реализации. Неясно, какой из них вы используете, так что вот только целевой пример Mojarra:
import com.sun.faces.renderkit.html_basic.TextRenderer;
public class MyTextRenderer extends TextRenderer {
@Override
protected void getEndTextToRender(FacesContext context, UIComponent component, String currentValue) throws IOException {
Object dataProvide = component.getAttributes().get("data-provide");
if (dataProvide != null) {
context.getResponseWriter().writeAttribute("data-provide", dataProvide, null);
}
super.getEndTextToRender(context, component, currentValue);
}
}
Зарегистрируйте это следующим образом в faces-config.xml
чтобы заставить его работать:
<render-kit>
<renderer>
<component-family>javax.faces.Input</component-family>
<renderer-type>javax.faces.Text</renderer-type>
<renderer-class>com.example.MyTextRenderer</renderer-class>
</renderer>
</render-kit>
В JSF 2.2 это возможно благодаря новым passthrough
пространство имен или <f:passThroughAttribute>
тег. Смотрите также Что нового в JSF 2.2? - Сквозные атрибуты HTML5.
Итак, так:
<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText id="typeahead" a:data-provide="typeahead" />
(обратите внимание, что type
атрибут по умолчанию text
уже)
Или же:
<h:inputText id="typeahead">
<f:passThroughAttribute name="data-provide" value="typeahead" />
</h:inputText>