gpt4 book ai didi

jsf - 从 JSF 中的支持 bean 设置 ID

转载 作者:行者123 更新时间:2023-12-02 21:41:57 24 4
gpt4 key购买 nike

这合法吗?

<h:form id="status${a.myID}" >
// ...
</h:form>

其中“a”是支持 bean 中的对象。这似乎有点工作,但是当我查看渲染的 HTML 时,我看到 id 为::0:status例如,代替 :status0正如我所期望的。我的主要问题是尝试引用 <f:ajax render=... 中的 id 。我得到的信息是“包含未知的 id...”,几乎包含了我能想到的所有组合。是否可以使用来自支持 bean 的值可靠地设置 id?

最佳答案

单字母变量名${a}以及像 :0 这样的迭代索引的症状自动附加在客户端 ID 中,表明此 <h:form>位于 JSF 迭代组件内,例如 <h:dataTable><ui:repeat>var="a"其中实际上不是支持bean。它将确认并解释迄今为止描述的所有症状。如果${a}是一个真正的支持 bean(而不是迭代变量),那么它就会“起作用”并且您会看到 :0:status0 , :1:status0 , :2:status0等等——但其实用性值得怀疑。

首先,id JSF 组件的属性在 View 构建时进行评估和设置,即基于 XHTML 源代码文件构建 JSF 组件树的时刻。 var JSF 迭代组件的属性是在 View 渲染时设置的,即基于 JSF 组件树生成 HTML 输出的时刻。因此,逻辑结果是 var 设置的对象属性目前可用 id需要设置属性,因此计算结果为 null/空字符串。效果和你做的完全一样

<h:form id="status">

JSF 迭代组件已经自动将迭代索引附加到生成的客户端 ID 中。在组件ID中手动设置迭代项的ID是没有任何意义的。即物理上只有一个 <h:form> JSF 组件树中的组件在基于当前迭代轮次生成 HTML 输出期间又会被多次重用。

这个问答应该更值得深思:JSTL in JSF2 Facelets... makes sense?


回到引用 <f:ajax render> 中的组件的具体功能需求,你肯定需要以不同的方式解决这个问题。不幸的是,您没有清楚地描述源组件和目标组件的上下文,因此不可能给出/解释正确的客户端 ID,因此我只是给您一个链接,以便您可以自己解决: How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"


与具体问题无关,旧的 JSP EL 样式 ${...} Facelets 与 #{...} 具有完全相同相同的效果。为了避免您自己和您 future 的维护人员感到困惑,建议完全禁止使用 ${...}并坚持#{...}每时每刻。另请参阅Difference between JSP EL, JSF EL and Unified EL

关于jsf - 从 JSF 中的支持 bean 设置 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20279122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com