1

JSF2コンポーネントでブートストラップ関連のタグを使用する方法はありますか?たとえば、次のようなものを必要とするブートストラップ先行入力機能の使用に興味があります

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

しかし、data-provide存在しないためh:inputTextに削除されるため、先行入力機能は明らかに機能しません。

4

1 に答える 1

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>タグによって可能になります。JSF2.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>

参照:

于 2013-02-18T12:02:23.223 に答える