转换为XPages的Html正文属性

转换为XPages的Html正文属性,xpages,Xpages,我希望有一个(body)包含属性data target、data spy和data twwttr,并最终呈现如下: 你能帮我吗 您可以在onClientLoad事件上设置主体属性: 呈现的页面正文具有所需的属性: 默认情况下,这在服务器端是不可能的。必须覆盖现有的ViewRootRenderer 一,。 创建一个新的Java类,该类扩展了XPages的现有ViewRootRenderer。此类必须重写方法encodeHtmlBodyStart,该方法生成body属性的HTML代码: pa

我希望有一个(body)包含属性data target、data spy和data twwttr,并最终呈现如下:



你能帮我吗

您可以在
onClientLoad
事件上设置主体属性:


呈现的页面正文具有所需的属性:


默认情况下,这在服务器端是不可能的。必须覆盖现有的ViewRootRenderer

一,。 创建一个新的Java类,该类扩展了XPages的现有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);

    }
}
如您所见,要添加的属性在上面是硬编码的。硬编码零件(样式和类别属性)之前的代码是必需的,因为这是默认代码

二,。 在faces-config.xml中注册此ViewRootRenderer:


javax.faces.ViewRoot
ch.hasselba.jsf.ViewRootRenderer
ch.hasselba.jsf.ViewRootRenderer
三,。 使用XPage的renderedType属性添加此渲染器,而不是默认渲染器:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    rendererType="ch.hasselba.jsf.ViewRootRenderer">
</xp:view>

这是仅将渲染器添加到特定XPage的方法。如果要在整个应用程序中覆盖它,则必须更改现有的渲染器类(步骤2)


javax.faces.ViewRoot
com.ibm.xsp.ViewRootEx
ch.hasselba.jsf.ViewRootRenderer

您现在可以跳过步骤3,但请注意,这会影响应用程序中的每个XPage。

非常好的解决方案!我试着用“开箱即用”的可能性,比如主题,但没有办法让它工作。所以我最终得到了我的客户端解决方案。但是,你的是完美的。我知道这是旧的,只是在Domino/Designer 9.01 FP10上确认了一下(5年后)-这仍然是一个有效的解决方案。我没有执行第3步编辑默认渲染器,效果非常好。
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    rendererType="ch.hasselba.jsf.ViewRootRenderer">
</xp:view>
<?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>