私は現在、XspInputTextフィールド aを含む xsp ライブラリ コンポーネントとXspCommandButton、で作成されたカスタム html コードに取り組んでいResponseWriterます。
すべてのものを korrekt でレンダリングできますが、EventHandler をボタンに追加する方法について質問があります。
私が見る限り、ページに を追加するか、のXspEventHandlerを使用してみてください。addActionListenerXspCommandButton
私はすでに、イベントリスナーで運がなくても、イベントに行き詰まり、コンポーネントのメソッドの1つをトリガーする方法が見つからないという両方を試しましonClickたXspEventHandler。インターネットを検索しましたが、このトピックについて何も見つかりませんでした。
/xsp/ComponentName.. にある XPage コードの 1 つを調べたところ、デザイナーは .setScript メソッドを使用してスクリプトを追加します。
MethodBinding script = evaluator.createMethodBinding(result,
しかし、私の例ではうまくいかないと思います。
ここに私のコードのサンプルがあります:
public class myComponentRenderer extends Renderer{
public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
XspDiv div = createSearchDiv(context,control.getTypeAheadList());
div.encodeBegin(context);
div.encodeChildren(context);
div.encodeEnd(context);
}
private XspDiv createUpperDiv(FacesContext context,ArrayList<String> typeAheadList) throws IOException{
XspDiv container = new XspDiv();
container.setId("container");
XspInputText SearchInput = new XspInputText();
SearchInput.setId("input");
SearchInput.setRole("textbox");
SearchInput.setStyleClass("lotusText");
SearchInput.setType("text");
XspTypeAhead searchTypeAhead = new XspTypeAhead();
searchTypeAhead.setIgnoreCase(true);
searchTypeAhead.setMode("partial");
searchTypeAhead.setVar("typed");
searchTypeAhead.setValueMarkup(true);
searchTypeAhead.setMinChars(1);
searchTypeAhead.setValueList(typeAheadList);
XspCommandButton searchButton = new XspCommandButton();
searchButton.setId("searchBtn");
searchButton.addActionListener(/* ? new AktionListener(...)*/);
//or
更新:
Sven Hasselbach からのコメントの後にコードを更新しました。ページを完全に更新できるようになりましたが、通過しようとしたコードMethodeBindingが実行されません。エラーやメッセージは表示されず、「何も起こらない」だけです。
XspEventHandler searchEvent = new XspEventHandler();
MethodBinding action = context.getApplication().createMethodBinding("#{javascript:print(\"Hallo World\");}",
null);
searchEvent.setAction(action);
searchEvent.setSubmit(true);
searchEvent.setEvent("onclick");
searchEvent.setRefreshMode("complete");
searchButton.getChildren().add(searchEvent);
container.getChildren().add(searchTypeAhead);
container.getChildren().add(SearchInput);
container.getChildren().add(searchButton);
}
ActionListeners に関する私の知識も少し限られていますが、これらActionListenerを AWT で使用されているものと比較することはできないと確信しています。
アップデート2:
スクリプトが実行されない理由を説明する別の興味深いことを見つけました。私のコンポーネントのクライアント側の HTML コードを見ると、私の XPage の残りの部分のように計算された ID を取得していないことがわかります。
私のコンポーネント:<div id="myComponentHolder1">
その他の XPage コンポーネント:<span id="view:_id1:myComponent1">
解決済み:
いよいよ作業。メソッドバインディングのヒントをくれたSvenに感謝します。現在は機能していますが、createUpperDivメソッドを my から myRendererに移動する必要がありましたComponent。また、コンポーネントを変更する必要がありましimplementた。FacesComponentその後、メソッドをメソッドに追加しましたbuildContents。