jsf - JSF 自定义组件
问题描述
我有一个要重写的遗留代码。它包含许多自定义 JSF 组件。当它们在树中时,它们中的大多数只是简单地构建其他组件(来自 JSF 核心或其他自定义)的子树。因此,例如在 xhtml 中,我有:
<custom-component atributes...>
<child-component/>
<child-component/>
</custom-component>
然后在这个组件的 PostAddToViewEvent 实现中,例如:
UIComponent rootChildElement = JSFUtil.findAncesstorOfType(this, HtmlForm.class);
List<UIComponent> guiListChildren = this.getChildren();
if (rootChildElement == null) {
rootChildElement = new HtmlForm();
} else {
rootChildElement = new UINamingContainer();
}
rootChildElement.getChildren().addAll(this.getChildren());
但是在调试过程中,我注意到当 JSF 处理此类自定义组件的 AJAX 请求时,即使将子级添加到创建的表单中,它们也会从 XHTML 页面重新构建并再次添加。这导致在执行 AJAX 时,这些孩子实际上位于树中的两个位置。
有趣的是,这在 JSF 2.0.3 中有效,但是当我们想升级到 JSF 2.1.something 它停止工作,因为在预期的树中找不到作为 AJAX 源的子命令链接。
我认为应该可以在 PreRenderView 阶段做同样的事情,但是操作将不起作用,因为命令组件创建得太晚了。
应该如何实现这些组件:
- 复合组件
- 小面标签
- 标签装饰器?
- 别的东西?
在这里修改组件树是否安全?如果我有一个组件,它不会重新分配子组件,而是向自身添加一些新项目,例如命令按钮或其他组件?
解决方案
推荐阅读
- javascript - 两个使用 Javascript 的 HTML 页面链接
- ssl - 重网站负载下的 IIS SSL 问题——非 SSL 工作正常
- node.js - 在 node.js 单元测试中断言 not null 或 not undefined 的最佳方法是什么?
- grep - 在 Adb Shell 中格式化文本
- ruby - Ruby 语言奇怪的整数运算:(-5/2) != -(5/2)
- react-native - React Redux 没有更新状态
- swift - 收到警告“只能从主线程使用图像”
- security - 绕过 SQL 字符黑名单过滤
- android - 数字资产链接验证与 SSL 客户端证书
- javascript - Sequelise 创建奇怪的查询