ke3*_*pup 1 jsf-2 twitter-bootstrap
有没有办法在 JSF2 组件中使用引导相关的标签?例如,我对使用引导预输入功能感兴趣,该功能需要类似的东西
<h:inputText id="typeahead" type="text" data-provide="typeahead"></h:inputText>
Run Code Online (Sandbox Code Playgroud)
但由于它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);
}
}
Run Code Online (Sandbox Code Playgroud)
按如下方式注册它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>
Run Code Online (Sandbox Code Playgroud)
在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" />
Run Code Online (Sandbox Code Playgroud)
(请注意,该type属性默认为text已经)
或者:
<h:inputText id="typeahead">
<f:passThroughAttribute name="data-provide" value="typeahead" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4090 次 |
| 最近记录: |