我必须为<h:commandLink/>
标签编写一个自定义渲染器来支持data-*
为了将 JSF 2.1 与 jQuery 移动框架一起使用,
我的 JSF 标记和此标记生成的输出如下:
<h:commandLink value="Prev" data-theme="e" data-role="button" data-inline="true" data-mini="true" data-icon="arrow-l"/>
<h:commandLink value="Page 1 of 3" data-theme="e" data-role="button" data-inline="true" data-mini="true"/>
<h:commandLink value="Next" data-theme="e" data-role="button" data-inline="true" data-mini="true" data-icon="arrow-r" data-iconpos="right"/>
很明显,我的自定义渲染器正确渲染了第二个和第三个<h:commandLink/>
标签,但不是第一个。似乎data-*
属于第一个标签的属性是用直接父级呈现的<div/>
标签呈现的。这似乎是 Mojarra 的一个奇怪(和错误)的行为(我使用V 2.1.11
)。请告诉我如何克服这个问题?
我的自定义渲染器代码如下:
public class MyCommandLinkRenderer extends CommandLinkRenderer {
@Override
public void encodeBegin(FacesContext context, UIComponent component) {
String[] attributes = {"data-theme", "data-role", "data-icon", "data-inline", "data-mini", "data-iconpos"};
ResponseWriter writer = context.getResponseWriter();
try {
for (String attribute : attributes) {
String value = (String) component.getAttributes().get(attribute);
if (value != null) {
writer.writeAttribute(attribute, value, attribute);
System.out.println(attribute + " " + value);
}
}
super.encodeBegin(context, component);
} catch (Exception e) {
}
}
}