우리는 하나의 드롭 다운 결과가 다른 드롭 다운과 관련이있는 몇 가지 관련 드롭 다운을 가지고 있습니다.JSTL/JSP에서 자바 스크립트 메소드로 자바 맵을 패스
맵의 형태로 선택할 때 무엇을 선택할지에 대한 매핑이 정의되어 있습니다.
Map<String,Map<String,String>> topics = new HashMap<String, Map<String,String>>();
Map<String,String> ds = new HashMap<String, String>();
ds.put("Array", "Array");
ds.put("LL", "LL");
topics.put("DS", ds);
Map<String,String> algo = new HashMap<String, String>();
algo.put("BS", "BS");
algo.put("Sorting", "Sorting");
topics.put("Algorithm", algo);
Map<String,String> phil = new HashMap<String, String>();
phil.put("phil1", "phil1");
phil.put("phil2", "phil2");
topics.put("Philosophy", phil);
Map<String,String> others = new HashMap<String, String>();
others.put("others", "others");
topics.put("Others", others);
위의 그림에서와 같이 "DS"가 선택되면 "Ärray"및 "LL"을 표시하려고합니다. 다른 매핑의 경우도 마찬가지입니다.
이 맵을 JSP에 전달하고 JSTL을 사용하여 옵션을 렌더링합니다. 후속 드롭 다운을 채우기 위해 JS를 호출하기로 결정하면서이를 JSON으로 변경하려고합니다.
선택한 옵션의 특정 맵을 JS 메서드에 전달하고 후속 드롭 다운을 채우고 싶습니다.
JSON으로 변환하는 것이 유일한 방법입니까? 그렇다면 컨트롤러에서 전달하는 것은 어떻습니까? 컨트롤러에서 전달하지 않으면 JSP 자체에서보다 명확한 방법으로 무엇을 할 수 있습니까?
<div>Subject</div>
<select name="topic" onchange="callJavaScriptMethodWithMapOfSelectedComponent(mapOfSelectedValue)");">
<c:forEach var="entry" items="${topics}">
<option value="${entry.key}">${entry.key}</option>
</c:forEach>
</select>
<select name="college">
<option value="default">Select Subject</option>
</select>
아래 첫 번째 드롭에서 선택한 값에 따라, 우리는 아래로 두 번째 드롭에 populatevalues 할 필요가 다음과 같이
JSP 블록이다.
JS 메소드는 첫 번째 드롭 다운에서 선택된 값의 맵을 취하여 두 번째 값을 채 웁니다.
function setOptions(chosen) {
var selbox = document.myform.college;
selbox.options.length = 0;
if (chosen == " ") {
selbox.options[selbox.options.length] = new Option('Please select one of the options above first',' ');
}
selbox.options[selbox.options.length] = new Option('//Choosen from the map passed','oneone');
}
}
왜 키와 값이 같은 경우 해시 맵을 사용하고 있습니까? – NimChimpsky
이것은 단지 예일뿐입니다. 예를 들어 이름과 함께 제목 코드를 사용할 수 있습니다. – instanceOfObject
해결할 수 있었습니까? 동일한 구현이 필요합니다. – HKumar