Это, вероятно, шанс иметь 10 номеров в порядке с 30% до 40%, которые вы упомянули.
Удалите фигурные скобки из функции обратного вызова sort (так после жирной стрелки), чтобы она возвращала что-то.
Вы получаете код JSP, который выполнен на сервере, путавшем с кодом JavaScript, это выполняется на клиенте. Отрывок <%=columns.get(j++)%>
выполняется однажды, на сервере, и цикл JavaScript вокруг этого не важен в этой точке. Когда это прибывает клиент, говорит тело цикла просто colArray[i] = "first entry";
который, конечно, помещает ту же строку в каждый элемент массива.
Что необходимо сделать, вместо этого должен иметь цикл, выполняются на сервере, как это:
<% for (int i=0; i<columns.size(); i++) { %>
colArray[<%= i %>] = "<%= columns.get(i) %>";
<% } %>
Мои навыки JSP ржавы, и синтаксис может отличаться, но я надеюсь, что Вы получаете идею.
Править: Как был указан в комментариях, необходимо быть ОЧЕНЬ осторожны относительно выхода из чего-либо в тех Строках, которые могли заставить их интерпретироваться как код JavaScript (наиболее заметно кавычки) - особенно, если они содержат пользовательский контент. Иначе Вы оставляете свое приложение широко открытым для сценариев перекрестного сайта и нападений подделки запроса перекрестного сайта.
Попытайтесь использовать JSON (объектная нотация JavaScript), было бы довольно просто закодировать массив и декодировать его на JavaScript
проверьте его здесь
После того как JavaScript достигает клиента, серверный код прекратил выполняться. Серверный код не выполняется "параллельно" с клиентским кодом.
Необходимо создать всю инициализацию JavaScript в Java и отправить его, завершиться и исполняемый файл, клиенту:
<%
StringBuffer values = new StringBuffer();
for (int i = 0; i < columns.size(); ++i) {
if (values.length() > 0) {
values.append(',');
}
values.append('"').append(columns.get(i)).append('"');
}
%>
<script type="text/javascript">
var colArray = [ <%= values.toString() %> ];
</script>
Это - всего один способ сделать это, можно также создать вывод "на лету" путем встраивания серверного кода в [
и ]
. Я использовал этот пример, чтобы попытаться продемонстрировать разделение между созданием строки, которая включает клиентский JavaScript и вывод это к браузеру.