2013-02-21 89 views
1

我有一個基於對象的'名稱'字段填充的javascript下拉列表。是否可以將整個對象放在下拉列表中,並只顯示名稱? im問的原因是因爲我想根據用戶選擇的內容更改另一個下拉列表的值,並且該信息在第一個對象中已經可用(在我刪除名稱之前)。從對象的javascript下拉列表中顯示一個值

因此,在這一刻,我有這個(Java的控制器):在JavaScript端

List<String> hostsList = new ArrayList<String>(); 

for (Client client : adminService.getClients()){ 
    hostsList.add(client.getName()); 
} 

result.put("hostsList", hostsList); 

,然後這樣的:

<form:form id="iForm" method="post" 
action="${pageContext.request.contextPath}/host" 
commandName="hostsForm"> 
<td valign="top">Hosts:</td> 
<td valign="top"><form:select path="uSetHostName"> 
<form:option value="NONE" label="--- Select ---" /> 
<form:options items="${hostsList}" /> 
</form:select> 
</td> 

那麼,如何把整個對象到下拉列表,並只是顯示它的名字?

感謝,

回答

1

你問了一個Java對象轉換成JavaScript對象,據我所知,這樣您就可以在以後使用該對象在JavaScript帶動下拉值。

有幾種方法可以做到這一點。第一種方法是將每個Java Client對象表示爲JavaScript對象,然後在JavaScript中填充這兩個下拉列表。這可能是最簡單的使用某種類型的JSON庫,如GsonJackson。下面是使用jQuery和GSON一個例子:

<script lang="text/javascript"> 
    var clients = <%= new Gson().toJson(clients) %>; 

    // Fill the first dropdown. 
    $("#myDropdown").empty(); 
    $.each(clients, function() { 
     $("<option/>").attr("value", this.id).text(this.name).appendTo("#myDropdown"); 
    }); 

    $("#myDropdown").on("change", function(event) { 
     var selectedClientId = $("#myDropdown").val(); 
     var client = $.grep(clients, function(client) { 
      return client.id = selectedClientId; 
     }); 
     $("#myOtherDropdown").val(client.someOtherValue); 
    }); 
</script> 

... 

<select id="myDropdown" name="..."></select> 

... 

<select id="myOtherDropdown" name="..."></select> 

第二種方法是做的正是你現在在做什麼,然後放了你所需要填充其他下拉到Client對象的最小量JavaScript代碼。這看起來像這樣:

<script lang="text/javascript"> 
    var clientIdToOtherValueMap = { 
     <% 
     for (Client client : clients) { 
      %> 
      '<%= client.id %>': '<%= client.otherDropdownId %>', 
      <% 
     } 
     %> 
     '': '' 
    }; 

    // Fill the first dropdown. 
    $("#myDropdown").on("change", function(event) { 
     $("myOtherDropdown").val(clientIdToOtherValueMap[$("#myDropdown").val()]); 
    }); 
</script> 

... 

<select id="myDropdown" name="..."></select> 

... 

<select id="myOtherDropdown" name="..."></select> 

希望能幫助你開始!

+0

感謝您的回覆。我正在努力尋找一種將客戶端對象轉換爲Javascript的方式。這是直截了當的? – maloney 2013-02-21 13:42:42

+0

正如我所提到的,一種方法是通過Gson或Jackson將其轉換爲JSON。因此,上面的答案中的<%= new Gson()。toJson(clients)%>'。你需要確保你的'Client'對象沒有指向一堆你不想序列化的東西 - 或者至少,如果是的話,你註釋了額外的屬性以防止它們被存在轉換爲JSON。 – 2013-02-21 13:47:29