日期:2014-05-17  浏览次数:20563 次

facelet .xhtml页面里的注释,不让注释的内容执行

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>