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

时间:2011-12-14 20:23:02

标签: 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流中的结果膨胀 run / render-time只是简单的丑陋,例如带有ID的<span>元素 这绝对没有增加页面的建设性价值

附录:

基于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。给定行或元素的运行时。

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

1 个答案:

答案 0 :(得分:4)

我不认为规范要求给组件显式ID。如果没有用户设置ID,JSF应该总是生成一个。

那就是说,JSF参考实现(RI),我认为是史前的WebSphere可能会使用的,在1.1中是非常错误,所以你可能会遇到错误,而不是使用JSF错误。