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>
として値を追加し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
キャストしてそのURLを設定しています(画像は同じデータベースに存在します)。UIComponent
UIGraphicEx
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
コンソールで起動します。私はここで何が間違っているのですか?これは続行する正しい方法ですか?
ここでの私の最後の目的は、(何らかの入力に基づいて)オンザフライで画像データを生成し、それをレンダラーを介して画像制御に入れることです。どうすればそれを達成できますか?