在JSF2 h:inputText组件中使用bootstrap相关标签

时间:2013-02-18 03:10:38

标签: jsf-2 twitter-bootstrap

有没有在JSF2组件中使用bootstrap相关标签?例如,我对使用bootstrap typeahead功能感兴趣,这需要类似

的功能
<h:inputText id="typeahead" type="text" data-provide="typeahead"></h:inputText>

但由于data-provide不存在h:inputText,因此它会被剥离,因此预先输入功能显然不起作用。

1 个答案:

答案 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>

另见: