0
Struts2 + Spring MVC + Hibernate를 사용하고 있으며 종속 드롭 다운 메뉴를 생성하려고합니다. 그러나 내 JQuery 함수는 페이지 시작시에만 호출되며 첫 번째 메뉴에서 옵션이 선택되지 않은 경우에는 호출되지 않습니다. 조직 드롭 다운 메뉴가 올바르게 작동합니다.sx : autocompleter onchange가 JQuery 함수를 호출하지 않습니다.
Search.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
<head>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function loadFacilities(value){
$("#facilitySelect").get(0).options.length = 0;
$("#facilitySelect").get(0).options[0] = new Option("Loading facilities", "-1");
$.ajax({
type: "POST",
url: "DependentFacility",
data: "{organizationID:" + value+ "}",
dataType: "json",
success: function(msg){
$("#facilitySelect").get(0).options.length = 0;
$("#facilitySelect").get(0).options[0] = new Option("Select facility", "-1");
$.each(msg.d, function(index, item){
$("#facilitySelect").get(0).options[$("#facilitySelect").get(0).options.length] = new Options (item.Display, item.Value);
});
},
error: function(){
$("#facilitySelect").get(0).options.length = 0;
alert("Failed to load facilities");
}
});
});
</script>
</head>
<div class="element">
<p class="title"><s:property value="getText('global.a_search_screen')" /></p>
<s:form name="ASearch" action="aSearchList" type="POST">
<p class="content">
<table class="topSearch">
//Some Table stuff was here
<td >
<s:url id="organizationList" action="getListOfOrganizations" />
<sx:autocompleter href="%{organizationList}" name="organizations" onchange="loadFacilities(this.value)" keyValue="0" value="---- SELECT ONE-----"/>
</td>
<td >
<select id="facilitySelect" name="selectedFacility" ></select>
</td>
Struts.xml
<action name="DependentFacility" class="facilityActions">
<result type="json">
<param name="root">facility</param>
</result>
</action>
FacilityActions.java
public class FacilityActions implements ModelDriven<FacilityVO> {
FacilityService facilityService;
private Map<String, String> facilities = new HashMap<String, String>();
FacilityVO facility = new FacilityVO();
public void setFacilityService(FacilityService facilityService) {
this.facilityService = facilityService;
}
public FacilityVO getModel(){
return facility;
}
public String execute() {
return Action.SUCCESS;
}
public String addFacility(){
try{
facilityService.addFacility(facility);
return "SUCCESS";}
catch(Exception e){
return "ERROR";
}catch(Throwable t){
return "ERROR";
}
}
public Map<String, String> getFacilities() {
List<FacilityVO> facilityList = facilityService.listFacilities();
Iterator<FacilityVO> iterator = facilityList.iterator();
while (iterator.hasNext()) {
FacilityVO fac = iterator.next();
facilities.put(fac.getFacilityName(), Integer.toString(fac.getFacilityId()));
}
return facilities;
}
public FacilityVO getFacility(Object thing){
System.out.println("got a thing:" + thing.toString());
return facility;
}
public FacilityVO getFacility(){
System.out.println("Getting facility but nothing given?");
return facility;
}
}
다음은
관련 코드는
loadOnTextChange가 작동하지 않습니다 ... 나는 단지 다시 호출되는지 확인하기 위해 작업에 System.out.println을 사용하고 있지만 시작시에만 호출됩니다. 도움을 주신 링크와 이전에 나온 링크가 있지만 Spring MVC로 작업하는 데 어려움을 겪었습니다. – user1287523
@ user1287523 스프링 MVC는 이것과 어떤 관련이 있습니까? 나는 당신이 무엇을하려하는지 이해하지 못합니다. jQuery를 Dojo 위젯과 함께 사용하려고한다면, 당신이 잘못하고있는 것입니다. –
내가 본 튜토리얼의 대부분은 두 클래스가 모두 포함 된 새로운 액션 클래스를 만들 것을 요청합니다. 그러나 두 개의 서로 다른 VO 파일을 구현할 수는 없습니다. 나는 내가 이것을 상당히 새로운 것으로 잘못 알고있다. 나는 내가해야 할 일에 대한 조언을 얻을 수있는 코드를 보여주기를 바랬다. – user1287523