gpt4 book ai didi

java - 为 Image 组件创建 Java 控件

转载 作者:行者123 更新时间:2023-12-01 15:12:59 26 4
gpt4 key购买 nike

Creating Java control in an NSF的使用教程,我能够创建一个简单的 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> 对其进行了修改值为 com.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类(class),我正在类型转换 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在控制台中启动。我在这里做错了什么?这是正确的处理方法吗?

我的最终目标是动态生成图像数据(基于某些输入),然后通过渲染器将其放入图像控制中。我怎样才能实现这一目标?

最佳答案

请确保该系列在组件、xsp-config 和 faces-config 中定义相同。另外,正如托比所说,您没有向 ResponseWriter 写入任何内容。您需要使用 ResponseWriter 将一些 html 输出到屏幕。或者,如果您只是想输出与 UIGraphicEx 渲染器完全相同的内容,请让您的渲染器扩展它(UIGraphicEx 渲染器类)并调用 super.encodeBegin() 和 super.encodeEnd()。

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);
ResponseWriter writer = context.getResponseWriter();
writer.append("<img src='http://someserver/somedb.nsf/review_icon.gif' />");
System.out.println("-----------" + g.getUrl());
}
@Override
public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
}

}

关于java - 为 Image 组件创建 Java 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com