无论如何在 JSF2 组件中使用引导相关的标签吗?例如,我有兴趣使用需要类似的 bootstrap typeahead 功能
<h:inputText id="typeahead" type="text" data-provide="typeahead"></h:inputText>
但是因为data-provide
它不存在,h:inputText
所以它被剥离了,所以 typeahead 功能显然不起作用。
无论如何在 JSF2 组件中使用引导相关的标签吗?例如,我有兴趣使用需要类似的 bootstrap typeahead 功能
<h:inputText id="typeahead" type="text" data-provide="typeahead"></h:inputText>
但是因为data-provide
它不存在,h:inputText
所以它被剥离了,所以 typeahead 功能显然不起作用。
取决于您使用的 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>