我想要一个包含属性data-target,data-spy和data-twwttr-rendered的(body),最后看起来像这样:
<body data-target=".bs-docs-sidebar" data-spy="scroll" data-twttr-rendered="true">
Run Code Online (Sandbox Code Playgroud)
你能帮我吗?
默认情况下,这不是服务器端.您必须覆盖现有的ViewRootRenderer.
1.创建一个新的Java类,它扩展了XPage的现有ViewRootRenderer.该类必须覆盖方法encodeHtmlBodyStart,它生成body属性的HTML代码:
package ch.hasselba.jsf;
import com.ibm.commons.util.StringUtil;
import com.ibm.xsp.component.UIViewRootEx;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import java.io.IOException;
public class ViewRootRenderer extends
com.ibm.xsp.renderkit.html_basic.ViewRootRendererEx2 {
@Override
protected void encodeHtmlBodyStart(FacesContext fc, UIViewRootEx uiRoot,
ResponseWriter rw) throws IOException {
String str = null;
// begin with body element
rw.startElement("body", uiRoot);
// add style attribute
str = uiRoot.getStyle();
if (StringUtil.isNotEmpty(str)) {
rw.writeAttribute("style", str, "style");
}
// add class attribute
str = uiRoot.getStyleClass();
if (StringUtil.isNotEmpty(str)) {
rw.writeAttribute("class", str, "styleClass");
}
// add your own attributes here
rw.writeAttribute("data-target", ".bs-docs-sidebar", "data-target");
rw.writeAttribute("data-spy", "scroll", "data-spy");
rw.writeAttribute("data-twttr-rendered", "true", "data-twttr-rendered");
// add new line
writeln(rw);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,您要添加的属性在上面是硬编码的.硬编码部分(样式和类属性)之前的代码是必需的,因为这是默认代码.
2. 在faces-config.xml中注册此ViewRootRenderer:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config>
<render-kit>
<renderer>
<component-family>javax.faces.ViewRoot</component-family>
<renderer-type>ch.hasselba.jsf.ViewRootRenderer</renderer-type>
<renderer-class>ch.hasselba.jsf.ViewRootRenderer</renderer-class>
</renderer>
</render-kit>
</faces-config>
Run Code Online (Sandbox Code Playgroud)
3.使用XPage 的renderedType属性添加此Renderer而不是默认的Renderer:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core"
rendererType="ch.hasselba.jsf.ViewRootRenderer">
</xp:view>
Run Code Online (Sandbox Code Playgroud)
这是将渲染器添加到特定XPage的方法.如果要在整个应用程序中覆盖它,则必须更改现有的渲染器类(步骤2).
<?xml version="1.0" encoding="UTF-8"?>
<faces-config>
<render-kit>
<renderer>
<component-family>javax.faces.ViewRoot</component-family>
<renderer-type>com.ibm.xsp.ViewRootEx</renderer-type>
<renderer-class>ch.hasselba.jsf.ViewRootRenderer</renderer-class>
</renderer>
</render-kit>
</faces-config>
Run Code Online (Sandbox Code Playgroud)
您现在可以跳过第3步,但请注意,这会影响应用程序中的每个XPage.
| 归档时间: |
|
| 查看次数: |
806 次 |
| 最近记录: |