Как встроить и вызвать сценарий JavaScript на странице RichFaces / JSF - PullRequest
4 голосов
/ 04 июня 2010

Я искал метод для встраивания и вызова функций javascript на страницах JSF. Я также использую RichFaces.

Чтобы определить функцию, кажется, я могу сделать это кросс-браузерным способом:

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

но я не уверен, как я могу вызвать эту функцию при загрузке страницы, чтобы возвращаемый текст был встроен в h:outputPanel. План состоит в том, чтобы встроить часы js в страницу, которая подается клиенту. Обратите внимание, что я не использую тег body, я использую лицевые панели ui:composition, f:view (ядро) и RF RI rich:page.

Спасибо

1 Ответ

9 голосов
/ 04 июня 2010

Независимо от того, какие типы серверных тегов вы используете, к тому времени, когда ваша страница попадет в браузер, который уже ушел, и это всего лишь HTML. (По крайней мере, так было бы лучше, иначе все бы не сработало.) Вам нужно сделать так, чтобы ваш код вызывался обработчиком события load. Есть разные способы сделать это, но самый простой из них:

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

Теперь, что касается инициализации другой части страницы, еще раз важно то, что заканчивается в HTML. Вы захотите, чтобы там был какой-то HTML-контейнер (<div> или что-то в зависимости от дизайна вашей страницы), и вы хотите, чтобы он имел уникальный атрибут "id". Ваш Javascript может затем использовать «id», чтобы найти элемент и установить его содержимое:

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

Вы, вероятно, сделаете это внутри функции load.

Кроме того, если вы используете Facelets вместо JSP, который представляет собой технологию представления на основе XML, вам потребуется добавить разделители разделов XML CDATA, если ваш JavaScript содержит комментарии // или литералы, такие как <,>, &&, и т.д. Вот пример с разделителями XML CDATA:

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

Здесь вы можете найти подробное объяснение , когда использовать CDATA. Они вам не нужны, если вы создаете страницы HTML5.

Удачного кодирования!

...