Динамически генерировать Javascript с JSP в IE - PullRequest
1 голос
/ 09 февраля 2010

Я пытаюсь сделать что-то подобное 1.

<head><% out.println("<script type=\"text/javascript\">"); out.println("function myfunction(){"); out.println("for(int i=0;i<10;i++){"); out.println("alert(message+i);"); out.println("}}"); out.println("</script></head>"); %>

и используйте его вот так

<body><input type="button" value="abcd" onclick="myfunction();"/></body>

Это генерирует javascript в моих страницах jsp. И он отлично работает, но только в Chrome, а не в IE. Я попробовал это

<head><%StringBuffer dynamicJavaScript = new StringBuffer();dynamicJavaScript.append("\n<script type=\"text/javascript\">");dynamicJavaScript.append("\n</script>");%></head>

и используйте его снова в теге

<%=dynamicJavaScript%>

Странным образом, только если я включу оба этих решений (1. & 2.) , это работает в IE У тебя есть идеи? Спасибо

1 Ответ

2 голосов
/ 09 февраля 2010
function my function(){

Это синтаксически неверно двумя способами: 1) my здесь не так. 2) function является зарезервированным ключевым словом.

Что касается динамического генерирования кода Javascript, я настоятельно рекомендую вам не использовать для этого scriptlets , а просто taglibs / EL. Ваша первая строка может быть полностью заменена с помощью JSTL (просто бросьте jstl-1.2.jar in /WEB-INF/lib) c:forEach:

<head>
    <script type="text/javascript">
        function myFunction() {
            // <c:forEach begin="0" end="10" var="i">
                alert(message${i});
            // </c:forEach>
        }
    </script>
</head>

Намного лучше, не так ли?

Обновление в соответствии с комментариями, вы также можете перебрать Collection с c:forEach. Заменить конкретный кусок на:

            <c:forEach items="${bean.vector}" var="item">
                alert('${item}');
            </c:forEach>

.. где ${bean} - ваш компонент, помещенный в любой из page, request, session или application и ${bean.vector} требует наличия геттера с этим именем в Bean класс как

public class Bean {
    public Vector<String> getVector() {
        return this.vector;
    }
}

Чтобы узнать больше о JSTL, обратитесь к Sun Учебное пособие по Java EE, часть II, глава 7 . Чтобы узнать больше об EL, обратитесь к учебному пособию по Java EE, часть II, глава 5 .

Тем не менее, Vector считается устаревшим , и вы должны использовать вместо него улучшенный ArrayList, который уже заменил его более десяти лет назад (подробнее о платформе Collections в этом уроке Sun ). В этой строке я бы также порекомендовал выбросить все эти 10-летние учебники и книги и прочитать последние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...