2010-07-05 5 views
2

Я начинаю с этим объектом,итерация по коллекции Java с помощью JQuery

public class myTO { 

    private String id; 
    private String name; 
    } 

, который используется в этом объекте

public myCombiTO { 
    private myTO myTO; 

    private List<String> valueList; 
    private List<String> displayList; 
} 

создать список этих объектов

List<myCombiTO> myCombiTOList = getMyCombiTOList(); 

Я использую этот список для установки атрибута страницы jsp

request.setAttribute("myAttrList", myCombiTOList); 

И перейдите на страницу jsp. Затем я использую JQuery и JSTL для заполнения выпадающий из этого списка

<select name="mYSelect" id="mySelect"> 
    <c:forEach var="myVar" items="${myAttrList}"> 
      <option value="${myVar.myTO.id}" > 
       <c:out value="${myVar.myTO.name}" /> 
      </option> 
    </c:forEach>  
</select> 

Моя проблема, я хочу, чтобы заполнить вторую каплю вниз, используя JQuery со значениями из mycombiTO.getValueList(). до сих пор у меня есть

$("#mySelect").change(function(){ 
     var myJSList = ${myAttrList}; 
     var chosenGroup = $("#mySelect").val(); 
     var valueArray = myJSList.get(chosenGroup).valueList; 
     var displayArray = myJSList.get(chosenGroup).displayList; 
     var items = {'display':[displayArray], 'value':[valueArray]}; 

     //now populate drop downs 

     $.populateSelect($('#myselect').get(0), items); 

    }); 

jQuery.populateSelect = function(element,items) { 
    $.each(items, function() { 
      element.options[element.options.length] = new Option(this.display,this.value); 
      }); 
}; 

Однако его не работает, пожалуйста, помогите. У меня возникла проблема с созданием объекта javascript на основе двух массивов. В идеале я хотел бы ссылаться на java-карту из jquery, используя пары ключ/значение. Это возможно ?

Заранее спасибо.

+0

Связанный: http://stackoverflow.com/questions/2263996/populating-child-dropdownlists-in-jsp-servlet – BalusC

ответ

1

Прямо сейчас вы проходите в items, который является объектом только с двумя парами ключ/значение, поэтому $.each() работает только для двух итераций. И для этих итераций this.display и this.value относятся ко всем массивам.

Одним из вариантов было бы просто передать displayArray и valueArray в к populateSelect() и перебора теми:

jQuery.populateSelect = function(element,displayArray,valueArray) { 
    $.each(displayArray, function(i,val) { 
     element.options[element.options.length] = new Option(displayArray[i] ,valueArray[i]); 
    }); 
}; 

Возвращаясь к первоначальному коду, вы могли бы сделать это:

jQuery.populateSelect = function(element,items) { 
    $.each(items.display, function(i,val) { 
     element.options[element.options.length] = new Option(items.display[i] ,items.value[i]); 
    }); 
}; 
+0

Да, спасибо; Я надеялся, что механизм будет использовать только одну структуру данных для displayArray и valueArray ...? – NimChimpsky

+0

@batthink - Конечно. Вы можете вернуться к исходному коду и перебрать 'items.display' вместо' items'. Я обновлю свой ответ. Другим решением было бы создание массива объектов и повторение этого массива вместо создания объекта с массивами внутри. – user113716

1

Я думаю, что ваш Java-код должен предоставить json-версию ваших объектов. Затем вы можете вставить весь myCombiTOList в свой jsp или получить один объект myCombiTO с запросом ajax в функции изменения.

Смежные вопросы