免责声明:我意识到JSF 2.0存在并且我很熟悉。这个问题与 IBM WebSphere 下的 JSF 1.1 有关。
我听到/看到过不同程度的支持,认为页面上的所有JSF组件都需要在开发时指定ID属性。当我说“所有”组件时,我的意思是一切......包括传统上“仅输出”的组件,例如<h:ouputText>
,<h:panelGroup>
,<h:panelGrid>
等......
此问题在内部不断出现,以响应日志中“重复组件ID”异常的出现。声称具有重复ID的组件有时是JSF生成的ID,或者是无法显式设置的元素的ID(例如,具有n行数的网格行中的元素)。
我正在寻找关于在JSF组件的范围内应该,可能或需要(或不需要)设置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。给定行或元素的运行时。
从那次经历来看,我很难理解哪种方式应该始终有效。哪种方式正确?
答案 0 :(得分:4)
我不认为规范要求给组件显式ID。如果没有用户设置ID,JSF应该总是生成一个。
那就是说,JSF参考实现(RI),我认为是史前的WebSphere可能会使用的,在1.1中是非常错误,所以你可能会遇到错误,而不是使用JSF错误。