JSF 2.2 Ajax渲染自定义组件

时间:2015-05-28 13:54:51

标签: css twitter-bootstrap jsf-2.2 custom-component

我正在研究JSF 2.2的组件库,以便在也使用Twitter Bootstrap 3 CSS框架的应用程序中使用。由于Bootstrap 3在<div>标签和其他容器的数量上可能有点冗长,你必须将表单和表单控件包装好以适应CSS样式,我正在创建自定义组件,可以使用单个标签。

到目前为止,我一直在努力扩展现有的JSF组件,并覆盖encodeBegin()encodeEnd()方法,并添加必要的<div>元素。 Bootstrap框架需要。我还在重写的方法中调用super.encodeBegin()super.encodeEnd()来利用我正在增强的组件的现有渲染。除了我想通过<f:ajax>标记的render属性渲染我的一个自定义组件的情况之外,这一直运行良好。当我将自定义组件的ID指定为render属性时,调试会显示调用整个组件的encodeBegin()encodeEnd()方法,但只有实际的<input>元素本身才是在页面上更新,而不是围绕它的所有标记。

这种行为很有意义,因为我在自定义标记上指定的id属性会传递给<input>元素。如何为自定义组件指定单独的ID字段?我考虑过可能不应该通过调用HTMLInputTextsuper.encodeBegin()来扩展super.encodeEnd()并利用它的渲染,但从逻辑上讲,我不想从头开始创建一个全新的组件,而只是增强现有的JSF。此外,我不想重新发明轮子以确保我支持所有<h:inputText>的属性,因为我希望我的组件可以直接替换JSF组件。

我意识到复合组件可能更简单并且可能不会遇到此问题,但在渲染过程中,我需要访问FacesContext来检查消息,因为我的自定义组件的渲染器将附加不同的Bootstrap类并且可能根据组件的验证状态插入整个新的<span>元素。我不知道如何使用复合组件完成此操作(不从请求bean请求信息)。

我可以使用另一种方法来使用现有的JSF组件吗?

0 个答案:

没有答案