html中prependid的作用,UIForm与prependId =“false”中断

我有一个关于这个事实背后的想法的问题,只有UIForm获得了属性prependId。为什么在NamingContainer界面中未指定属性?你现在可能会说这是因为后向可执行性,但是我宁愿打破可比性,并让实现该接口的用户也实现了prependId的方法。

从我的角度看,在UIForm组件中的prependId的主要问题是它会中断findComponent()

我会期望如果我使用prependId,那么NamingContainer行为会改变,不仅与渲染有关,而且还要在组件树中搜索组件时。

这里有一个简单的例子:

现在当我想要获取panelGroup组件时,我希望将字符串“group”传递给findComponent()方法,但是它不会找到任何东西,所以我必须使用“test:group”。

具体的问题是,当使用ajax与prependId =“false”时。 ajax标签期望在属性更新和进程中,值指示命名容器。这有点奇怪,当我使用prependId =“false”,我必须指定完整的id或路径,但可以。

那么这个代码将不会出现问题,但是它不会更新panelGroup,因为它找不到它。 PartialViewContext将只包含id“group”作为renderIds的元素。我不知道这是否是预期的,可能是,但我不知道代码。现在我们来到方法findComponent()找不到组件的点,因为传递为参数的表达式是“group”,方法将期望“test:group”来查找组件。

一个解决方案是编写自己的findComponent(),这是我选择处理这个问题的方式。在这种方法中,我处理一个NamingContainer的组件,并将一个属性prependId设置为false,就像一个普通的UIComponent一样。我必须为提供prependId属性的每个UIComponent都这样做,那是坏的。反射将有助于摆脱类型的静态定义,但它仍然不是一个非常干净的解决方案。

另一种方法是在NamingContainer接口中引入prependId属性,并将findComponent()的行为改为如上所述。

最后提出的解决方案将改变ajax标签的行为以传递整个id,但这只会解决ajax问题,而不是findComponent()实现背后的程序问题。

你觉得怎么样,为什么这样做呢?我不能第一个有这个问题,但是我找不到相关的话题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值