JSF2コンポーネントでブートストラップ関連のタグを使用する方法はありますか?たとえば、次のようなものを必要とするブートストラップ先行入力機能の使用に興味があります
<h:inputText id="typeahead" type="text" data-provide="typeahead"></h:inputText>
しかし、data-provide
存在しないためh:inputText
に削除されるため、先行入力機能は明らかに機能しません。
JSF2コンポーネントでブートストラップ関連のタグを使用する方法はありますか?たとえば、次のようなものを必要とするブートストラップ先行入力機能の使用に興味があります
<h:inputText id="typeahead" type="text" data-provide="typeahead"></h:inputText>
しかし、data-provide
存在しないためh:inputText
に削除されるため、先行入力機能は明らかに機能しません。
使用している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>