有没有在JSF2组件中使用bootstrap相关标签?例如,我对使用bootstrap typeahead功能感兴趣,这需要类似
的功能<h:inputText id="typeahead" type="text" data-provide="typeahead"></h:inputText>
但由于data-provide
不存在h:inputText
,因此它会被剥离,因此预先输入功能显然不起作用。
答案 0 :(得分:4)
取决于您正在使用的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>
标记。另请参阅What's new in JSF 2.2? - HTML5 Pass-through attributes。
因此,所以:
<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>