Как передать список объектов для просмотра и заполнить их в полях ввода динамически

#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 .