我目前正在研究一个包含XspInputText
字段 a的 xsp 库组件XspCommandButton
,以及一些使用ResponseWriter
.
我能够渲染 korrekt 的所有东西,但现在我陷入了如何将 EventHandler 添加到我的 Button 的问题上。
据我所知,我有两个可能性将 a 添加XspEventHandler
到页面或尝试使用addActionListener
.XspCommandButton
我已经尝试了这两种方法,但没有任何运气的事件监听器我被onClick
事件卡住了,XspEventHandler
我找不到任何东西如何触发我的组件的方法之一。我已经搜索了互联网,但我没有找到关于这个主题的任何内容。
我在 /xsp/ComponentName.. 中查看了我的一个 XPage 代码,设计师使用 .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);
}
我对 ActionListeneris 的了解也有点有限,但我很确定我无法将这些ActionListener
与 AWT 中使用的进行比较。
更新2:
我发现了另一件有趣的事情,可以解释为什么我的脚本没有被执行。当我查看我的组件的客户端 HTML 代码时,我可以看到它们没有像我的 XPage 的其余部分那样得到任何计算的 id。
我的组件:<div id="myComponentHolder1">
其他 XPage 组件:<span id="view:_id1:myComponent1">
解决了:
终于工作了。非常感谢 Sven 提供方法绑定的提示。它现在可以工作,但我不得不将createUpperDiv
方法从 my移动Renderer
到 my Component
. 我还必须将 Component: 更改implement
为FacesComponent
然后我将 Method 添加到buildContents
方法中。