Html正文属性转换为XPages

Jur*_*eck 3 xpages

我想要一个包含属性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)

你能帮我吗?

Sve*_*ach 7

默认情况下,这不是服务器端.您必须覆盖现有的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.