我想在PrimeFaces Tab / Tabview组件的基础上构建一个新组件。它应该看起来像浏览器中的添加选项卡,并打开一个页面来填写表单。问题是我想基于数据模型(http://www.primefaces.org/showcase/ui/tabviewModel.jsf)将它集成到TabView中。现在,我可以组合一个选项卡来填充表单和带有预定义数据的选项卡,或者使用TabView,它可以为我的数据动态创建选项卡。
我已经阅读过有关以两种方式创建自定义组件的JSF文档 - 作为复合组件或新的Java类。我试图创建一个自定义组件,但它似乎没有按照我描述的方式工作。
我的问题是:
1)是否可以用复合组件解决这个问题?如果是的话,有人可以给我一个提示吗?
2)如果没有,是否有基于现有PrimeFaces组件(可能是新的TabView)编写新组件的教程?
UPD:在做了一些研究后,我意识到最简单的方法是为TabView编写一个新的渲染器。我宣布了一个新的渲染器类:
public class AddableTabViewRenderer extends TabViewRenderer
并在faces-config.xml中注册:
<render-kit>
<render-kit-id>HTML_BASIC</render-kit-id>
<renderer>
<component-family>org.primefaces.component</component-family>
<renderer-type>org.primefaces.component.TabView</renderer-type>
<renderer-class>
de.idealo.evaluation.jsf.webapp.component.AddableTabViewRenderer
</renderer-class>
</renderer>
</render-kit>
但是,当渲染带有TabView组件的视图时,将调用TabViewRenderer的encodeEnd方法,而不是AddableTabViewRenderer的overriden方法。 你能告诉我一个问题可能在哪里吗?
答案 0 :(得分:0)
我的配置中的渲染器类错误。我误解了有关注册组件的说明。我认为render-type是将使用自定义渲染器渲染的类。它必须是org.primefaces.component.TabViewRenderer。现在它工作正常:))