#javascript #java #jquery #spring
#javascript #java #jquery #spring
Вопрос:
Я передаю список объектов в представление, используя атрибут Spring model. И в представлении я пытаюсь динамически заполнять набор входных данных с помощью jquery, как показано ниже :
передача списка из контроллера :
List<String> supplierNames = Arrays.asList("address1", "address2", "address3");
model.addAttribute("consumerAddresses", supplierNames);
просмотр (jsp):
<div class="input_fields_wrap">
<div><input type="text" id='label1'><input type="text" id='address1'></div>
</div>
<script>
$(document).ready(function() {
var consumerAddresses = "${consumerAddresses}";
var max_fields = 10;
var wrapper = $(".input_fields_wrap");
for (i = 0; i < consumerAddresses.length; i ) {
$(wrapper).append('<div><input type="text" id="label' i '" value=' consumerAddresses[i] '/><input type="text"
id="address' i '" value=' consumerAddresses[i] '/></div>');
}
});
</script>
Теперь проблема в том, что адреса потребителей передаются как массив [address1, address2, address3]
, но в полях ввода они заполняются [/
a/
d/
аналогично. что здесь пошло не так?
Ответ №1:
Внутри consumerAddresses
у вас не массив, а строка. А затем, когда вы пытаетесь выполнить итерацию по нему, вы просто берете из него несколько символов. Вам нужно преобразовать строку в массив перед итерацией по нему. В этом случае вы можете использовать split
метод.
var consumerAddressesArray = consumerAddresses.replace(/[[]'] /g,'').split(", ");
После этих операций у вас будет
[
"address1",
"address2",
"address3"
]
внутри вашей consumerAddressesArray
переменной.
И убедитесь, что вы обрезали все элементарные символы. Я имею в виду [
,
(пробел), ]
. В моем примере я использовал для этого регулярное выражение ( .replace(/[[]'] /g,'')
) . Он заменит квадратные скобки пустой строкой.
Комментарии:
1. спасибо за ответ. есть ли способ сделать это, не разделяя это? я имею в виду, не могу ли я получить доступ к исходному списку из javascript, который передается из атрибута модели?
Ответ №2:
Вы можете получить значение, которое возвращается spring mvc в некоторой переменной jsp, а затем использовать for-loop в jsp для итерации по этому списку, т.е :
<%
//get value in jsp variable
//i.e :request.getAttribute("consumerAddresses");
//here i assumme consumerAddresses is variable in jsp which has that arry value
for(int x=0;x<consumerAddresses.length;x ) {%>
$(wrapper).append('<div><input type="text" id="label<%=x%>" value='<%=consumerAddresses[x]%>'/>
<input type="text" id="address<%=x%>" value='<%=consumerAddresses[x]%>'/></div>');
<%}%>
Примечание: приведенный выше код не проверялся, возможно, в нем есть какая-то синтаксическая ошибка. Кроме того, вы можете сделать то же самое с помощью jstl .