使用在 NSF 中创建 Java 控件的教程,我能够创建一个简单的 Java 控件。现在我想扩展它以便它显示图像,所以我按以下方式修改了代码:
这是现在扩展UIGraphicEx
类而不是扩展类的示例控件类UIComponentBase
。
package com.example.component;
import com.ibm.xsp.component.UIGraphicEx;
public class ExampleControl extends UIGraphicEx {
public ExampleControl() {
super();
setRendererType("com.ibm.xsp.ImageEx");
}
@Override
public String getFamily() {
return "com.example.examplecontrol";
}
}
这是xsp-config
上面定义的示例控件类的文件。我通过添加<base-component-type>
value ascom.ibm.xsp.component.UIGraphicEx
并设置<renderer-type>
为 来修改它com.ibm.xsp.ImageEx
。
<faces-config>
<faces-config-extension>
<namespace-uri>http://example.com/xsp/control</namespace-uri>
<default-prefix>eg</default-prefix>
</faces-config-extension>
<component>
<description>Example</description>
<display-name>Example Control</display-name>
<component-type>com.example.examplecontrol</component-type>
<component-class>com.example.component.ExampleControl</component-class>
<component-extension>
<base-component-type>com.ibm.xsp.component.UIGraphicEx</base-component-type>
<component-family>com.example.examplecontrol</component-family>
<renderer-type>com.ibm.xsp.ImageEx</renderer-type>
<tag-name>exampleControl</tag-name>
<designer-extension>
<category>Example</category>
<selected-event>onclick</selected-event>
</designer-extension>
</component-extension>
</component>
</faces-config>
我的渲染器类看起来像这样。ResponseWriter
在这里,我没有使用类,而是将UIComponent
对象转换为UIGraphicEx
并设置其 URL(图像存在于同一数据库中)。
package com.example.renderkit.html_basic;
import javax.faces.render.Renderer;
import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import com.ibm.xsp.component.UIGraphicEx;
public class ExampleRenderer extends Renderer {
@Override
public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
UIGraphicEx g = (UIGraphicEx)component;
g.setUrl("review_icon.gif");
g.setRendered(true);
System.out.println("-----------" + g.getUrl());
}
@Override
public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
}
}
当我将此控件放在 XPage 中时,没有给出输出,但是System.out.println
方法中的语句encodeBegin
会在控制台中启动。我在这里做错了什么?这是正确的方法吗?
我的最终目标是动态生成图像数据(基于一些输入),然后通过渲染器将其放入图像控制中。我怎样才能做到这一点?