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