我目前正深入研究JSF,我有一个问题。 我在一个小应用程序中使用JSF 2.2(Mojarra 2.2.9)。我已经构建了一个自定义组件来呈现数据结构作为菜单。该代码看起来是这样的:onClick事件元素在customComponent中
@FacesComponent(createTag = true, tagName = "UIRecursiveTree", namespace = "")
public class UIRecursiveTree extends UIComponentBase {
@Override
public String getFamily() {
return "";
}
@Override
public void encodeBegin(FacesContext context) throws IOException {
}
private void writeFolderStructure(Map<IContainer, ?> map, ResponseWriter writer, String prefix) {
}
}
我已经剥离了一些代码,当然,我已经设置了家庭和命名空间,只是被人藏。该控件有一个值属性,它接收在我的应用程序中呈现的LinkedHashMap。 一切工作正常。目前我只是用一个代表我的结构的ResponseWriter打印一些标签。问题是,结构可能相当大,加载结构的机制并不理想,至少如果我一次加载所有内容,这需要很长时间。 所以,我的想法是,我想绑定我的元素(目前只是标签,但会被链接或类似的东西),以onClick事件,这触发组件加载自己的新值(Ajax)(获取当前元素的子元素并将它们添加到我的结构中,以便只在需要时加载这些值)
我知道在某些库中可能有一些控件可用于映射此类结构,但我我正在学习JSF,并且使用已经完成的工作并没有教我什么。 =)
所以,问题是,我怎样才能绑定一个onClick事件到我的元素来强制组件自我刷新?
在此先感谢。
通过查看“其他组件”的来源,我在这方面学到了很多东西。 PrimeFaces树是一个很好的例子,我认为它可以教你很多。也许BalusC有链接到一些教程,但在这里回答这个问题将取代很多(我的)时间,因为它不只是一些oneliner ... – Kukeltje
感谢您的答案,我会研究它。当然,我不想让你写我的代码,我只是想知道如何完成它。我过去使用了类似的技术,并且可以直接添加一个事件,在该事件中我可以在后端触发一个方法,并且可以给它一个可以刷新的ID。 JSF中有类似的方法吗? –
至于你试图解决的根本问题,OmniFaces有一个markupless树组件,它允许你完全自由地引入标记和事件。当然,它也是开源的http://showcase.omnifaces.org/components/tree。至于具体的问题,它有点过于宽泛和漫长,但我相信你正在具体寻找'ClientBehaviorHolder'。 – BalusC