0

Struts2+Spring MVC+Hibernate を使用しており、依存するドロップダウン メニューを作成しようとしています。ただし、私の JQuery 関数は、最初のメニューでオプションが選択されたときではなく、ページの起動時にのみ呼び出されます。組織のドロップダウン メニューは正常に機能しています。関連するコードは次のとおりです。

検索.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>

施設アクション.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;
}
}
4

1 に答える 1

1

Ajax と JavaScript のレシピが示すように、設定する適切な属性はloadOnTextChange.

これらは Dojo ウィジェットであり、単純な HTML コントロールではないことに注意してください。必ずしも標準の HTML 属性を使用して動作を変更できるとは限りません。

JSON を使用している場合は、JSON 結果のレシピを参照してください。あなたが作っているよりもはるかに簡単です。

于 2012-07-03T23:00:35.703 に答える