views:

180

answers:

1

I try to do something like that 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>"); %>

and use it like that

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

That is generate javascript within my jsp Pages.And it works fine but only in chrome and not in IE.I then tried this 2.

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

and use it like that again inside the tag

<%=dynamicJavaScript%>

In a weird way only if i include both of these solutions (1. & 2.) it works in IE. Have yoy got any ideas? Thank you

+2  A: 
function my function(){

This is syntactically invalid in two ways: 1) my is wrong here. 2) function is a reserved keyword.

With regard to generating Javascript code dynamically, I strongly recommend you to not use scriptlets for this, but just taglibs/EL. Your first line can be perfectly replaced with help of JSTL (just drop 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>

Much better readable, isn't it?

Update as per the comments, you can also iterate over a Collection with c:forEach. Replace the particular piece by:

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

..where ${bean} is your bean which is been placed in any of the page, request, session or application scopes and ${bean.vector} requires having a getter with that name in the Bean class like

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

To learn more about JSTL, consult Sun Java EE tutorial part II chapter 7. To learn more about EL, consult Java EE tutorial part II chapter 5.

That said, the Vector is considered legacy and you should be using the improved ArrayList instead which has already replaced it over a decade ago (more about Collections framework in this Sun tutorial). In this line, I would also recommend to throw all those >10 year old tutorials/books away and go read the more recent ones.

BalusC
I must say i'm not so good with EL.I want to get a Vector from a bean first and then generate a javascript with a for loop that shows the elements of the Vector.The problem is i don't know how to get the vector with EL.Something like that...Vector<generic> myVector = mybean.getMyVector();for (int i = 1; i < myVector .getSize(); i++) {out.println("alert("+myVector.elementAt(i).getMyProperty()+");");}
Argiropoulos Stavros
I programmed it exactly as you suggested but i still have the initial problem.In chrome all is working fine but in IE i get an error "object expected" which means that IE can't see myFunction().Any ideas?
Argiropoulos Stavros
You need to post an SSCCE (http://sscce.org) based on the **generated HTML output** (the JSP code is irrelevant here).
BalusC