gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:43:37 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" 实际上 不是 backing bean。它将确认并解释迄今为止描述的所有症状。如果${a}是一个真正的支持 bean(而不是迭代变量),那么它就会“工作”并且您会看到 :0:status0 , :1:status0 , :2:status0等——但其有用性值得怀疑。

首先,id JSF 组件的属性在 View 构建期间进行评估和设置,此时 JSF 组件树将基于 XHTML 源代码文件构建。 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