1).xhtml中的注释同xml注释
<!--
<h:selectOneMenu value="#{selectedOrder.customer}" rendered="#{selectedOrder!=null}">
<s:selectItems var="_user" value="#{testLazyAction.allUsers()}" noSelectionLabel="please select" label="#{_user.name}"></s:selectItems>
<s:convertEntity></s:convertEntity>
</h:selectOneMenu>
-->
2)注释的内容中不能有“--”,下面的注释会报错
<!--
<h:selectOneMenu value="#{selectedOrder.customer}" rendered="#{selectedOrder!=null}">
<s:selectItems var="_user" value="#{testLazyAction.allUsers()}" noSelectionLabel="-----" label="#{_user.name}"></s:selectItems>
<s:convertEntity></s:convertEntity>
</h:selectOneMenu>
-->
3)最重要的一点是注释的内容只是不显示,但会正常执行,里面的el表达式会被执行,所以必须保证注释里的内容是正确的才行,尽量不要注释,他会留下隐患。
下面的代码显示页面时会照样执行#{testLazyAction.allUsers()}。
<!--
<h:selectOneMenu value="#{selectedOrder.customer}" rendered="#{selectedOrder!=null}">
<s:selectItems var="_user" value="#{testLazyAction.allUsers()}" noSelectionLabel="please select" label="#{_user.name}"></s:selectItems>
<s:convertEntity></s:convertEntity>
</h:selectOneMenu>
-->
这样产生错误很难会被发现,因为你都不清楚产生错误的方法是什么时候调用的(你注释的代码,所以你认为这段代码是不存在的),我们曾经被这样的错误迷惑了很久,通过全文搜索找到了使用的地方,虽然被注释了却照样会执行。
解决办法 :在web.xml中配置facelets属性,这样被注释的代码就不会被执行了。
<context-param>
<param-name>facelets.SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>