java - 在 JSF 1.1 中设置组件 ID 属性的必要性

标签 java jsf

免责声明:我知道 JSF 2.0 存在并且很熟悉。这个问题与 IBM WebSphere 下的 JSF 1.1 有关。

我听说过/看到过不同程度的支持,即页面上的所有 JSF 组件都需要在开发时指定一个 ID 属性。当我说“所有”组件时,我的意思是一切......包括传统上“仅输出”的组件,例如 <h:ouputText> , <h:panelGroup> , <h:panelGrid>等等……

这个问题在内部不断出现,以响应日志中出现的“重复组件 ID”异常。声称具有重复 ID 的组件有时是 JSF 生成的 ID,或者是无法显式设置的元素的 ID(例如,具有 n 行的网格的一行中的元素)。

我正在寻找关于应该、可以或需要(或不需要)针对 JSF 组件范围设置哪些 ID 的客观指导。

我主要担心两方面的问题:

  • 疯狂地向所有事​​物(甚至可能不需要它们的事物)追加主动添加 ID,以消除任何可能性 重复组件 ID 异常的发生可能不是最好的 时间的使用。
  • 在 HTML 流中产生的膨胀 运行/渲染时间非常丑陋,例如 <span>带有 ID 的元素 绝对不会给页面增加任何建设性的值(value)

附录:

基于对 SO 的更多研究和其他帖子,我可能仍然有点困惑。 以下哪项是“正确的”?:

方法 A:<f:subview>在包含的页面中指定

<%-- parent_page.jsp --%>
<html>
    <f:view>
        <jsp:include page="included_child_page.jsp" />
    </f:view>
</html>


<%-- included_child_page.jsp --%>
<f:subview id="myID">
    <h:outputText value="Some content here..." />
</f:subview>

方法 B:<f:subview>在包含/父页面中指定

<%-- parent_page.jsp --%>
<html>
    <f:view>
        <f:subview id="myID">
            <jsp:include page="included_child_page.jsp" />
        </f:subview>
    </f:view>
</html>


<%-- included_child_page.jsp --%>
<h:outputText value="Some content here..." />

我们绝大多数的 JSP 使用上面的方法 A。我们经常从许多此类页面中收到重复的组件 ID 错误。一些页面被更改为使用方法 B。我们很少/从不从这些页面中得到错误——当我们这样做时,它通常来自呈现集合(表/列表)的组件,其中 Faces 实现必须生成任意 ID给定行或元素的运行时。

从那次经历中,我很难理解哪种方式应该始终有效。哪种方式正确

最佳答案

我认为规范从未要求为组件提供明确的 ID。如果用户未设置 ID,则 JSF 应始终生成一个。

也就是说,我猜想史前 WebSphere 可能正在使用的 JSF 引用实现 (RI) 在 1.1 中非常错误,因此您可能会遇到错误而不是使用 JSF错误。

关于java - 在 JSF 1.1 中设置组件 ID 属性的必要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8511129/

相关文章:

jsf - 如何在 PrimeFaces DataTable 中设置自增列?

java - 当他使用相同的凭据登录两次时如何使用户 session 无效

java - 在java程序运行时从控制台写入和读取数据

java - 通过ant将参数传递给java

javascript JSON 对象到 JSF back bean

java - JSF 日历组件

JSF2复合和cc的区别

java - (已修订)Eclipse EE 中 JSP 项目(使用 Tomcat 7)的根文件夹路径

java - 在java中计算数字的大小

java - OpenCV Grabcut 仅输出标记为 GC_FGD 的内容