代码之家  ›  专栏  ›  技术社区  ›  volvox

如何在RichFaces/JSF页面中嵌入和调用javascript脚本

  •  4
  • volvox  · 技术社区  · 14 年前

    我一直在寻找在JSF页面中嵌入和调用javascript函数的方法。我也在用RichFaces。

            <a4j:outputPanel ajaxRendered="true">
            <f:verbatim>
                <script type="text/javascript">
                    function datum() {
                        alert("hi");
                    }
                </script>
            </f:verbatim>
        </a4j:outputPanel>
    

    但我不知道如何在页面加载时调用此函数,以便它返回的文本嵌入到 h:outputPanel . 计划是在提供给客户机的页面中嵌入一个js时钟。注意我没有使用body标签,我使用的是facelets ui:composition , f:view (核心)和RF RI rich:page .

    1 回复  |  直到 14 年前
        1
  •  8
  •   Community holdenweb    7 年前

    不管你在使用什么样的服务器端标签,当你的页面进入浏览器的时候,这些标签都消失了,只剩下HTML了(至少,最好是这样,否则事情无论如何都不会成功。)您需要做的是安排“加载”事件处理程序调用您的代码。有多种方法可以做到这一点,但最简单的方法是:

     <f:verbatim>
         <script type="text/javascript">
            window.onload = function() {
                alert("hi");
            }
        </script>
    </f:verbatim>
    

    <div>

        var elem = document.getElementById("whatever");
        elem.innerHTML = // ... whatever ;
    

    你可能会在“load”函数里面做这些事情。

    另外,如果您使用的是Facelets而不是JSP,JSP是一种基于XML的视图技术,那么如果JavaScript包含注释//或诸如<之类的文字,则需要添加xmlcata部分分隔符>&&,等等。下面是使用XML CDATA分隔符的示例:

     <f:verbatim>
         <script type="text/javascript">
         //<![CDATA[
            //Comments won't show error now.
            window.onload = function() {
                alert("hi");
            }
        //]]>
        </script>
    </f:verbatim>
    

    你可以看到一个完整的解释 when to use CDATA here.

    快乐的编码!