Reputation: 9533
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
Upvotes: 1
Views: 3209
Reputation: 1109635
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.
Upvotes: 2