2012-07-03 51 views
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; 
} 
} 

回答

1

由於Ajax and JavaScript recipes show要設置的適當屬性是loadOnTextChange

請記住,這些是Dojo小部件,而不是簡單的HTML控件–您不一定使用標準HTML屬性來修改它們的行爲。

如果您使用的是JSON,請參見recipe for JSON results;它可以比你做得更簡單。

+0

loadOnTextChange無法正常工作......我只是在操作上使用System.out.println來查看它是否再次調用,但它只是在啓動時調用。您給他的幫助很有幫助,之前我遇到過,但是我在使用Spring MVC時遇到了麻煩。 – user1287523

+0

@ user1287523 Spring MVC與這些有什麼關係?我真的不明白你要做什麼 - 如果你試圖在jQuery中使用Dojo小部件,那麼你做錯了。 –

+0

我見過的大部分教程都要求我創建一個包含兩個類的新操作類。但是我不能實現兩個不同的VO文件。 我知道我做錯了,因爲我對此很新。我希望如果我顯示我的代碼,我可以得到有關如何做的建議。 – user1287523