2012-01-08 34 views
1

我有一個簡單但煩人的問題 我有一個成功填充<s:select>標籤的對象列表。標籤如下(請不要介意西班牙名字或信息:將變量傳遞給struts 2標籤上的javascript事件

<s:select name="curProfesor.pais" value="%{curProfesor.pais}" list="paises" listValue="nombre" headerKey="" headerValue="Seleccione" label="País de Residencia:" onchange="changer(1,???})"/> 

和類列表的結構是:

public class Pais{ 
    private int id; 
    private int iso_num; 
    private String iso2; 
    private String iso3; 
    private String nombre; 

問題被描繪成???這就是說,無論我如何嘗試,我都無法將信息從列表傳遞到「onchange」函數,我想傳遞的是對象的id,並且我嘗試過使用OGNL括號( %{}),它似乎並不工作。

任何有關此事的幫助將不勝感激

編輯:我試圖通過是當前所選對象的ID,也就是的<s:select>

回答

2

我覺得你在這裏混了兩個概念選定值的ID:Struts標籤是在處處理時在服務器上呈現頁面,同時在頁面已被呈現之後選擇在客戶端側發生的選項。所以你不能使用struts標籤來獲得選定的值,除非你做了一個改回的帖子。

首先,您需要做的是將Pais ID呈現爲SKS已提及的選項元素的關鍵字。

<s:select id="curProfesor_pais" name="curProfesor.pais" list="paises" listKey="id" listValue="nombre" headerKey="" headerValue="Seleccione" label="País de Residencia:" onchange="changer('curProfesor_pais')"/> 

備註listKey="id"。我還在元素中設置了一個ID,以便我們可以更容易地引用它。其次,只需通過JavaScript函數獲取選定的選項ID即可。

function changer(elementId) { 
    var selectedId = document.getElementById(elementId).value; 
    alert(selectedId); 
    //....... 
} 

傳遞元素ID爲changer功能實在是沒有必要,除非你打算重用的功能。

另請注意,value="%{curProfesor.pais}"是多餘的,因爲元素的名稱是相同的 - curProfesor.pais

如果某些事情沒有按預期工作,那麼檢查呈現的HTML總是很好。如果你想檢查它,你會注意到Pais ID沒有被渲染爲選項ID。

0

這應該這樣做:

<s:select list="mylist" listKey="myid" id="listid" onchange="callme()"/> 

<script type="text/javascript"> 
function callme(){ 
    var v=document.getElementById('listid').value; //id of the selected element 
    alert(v); 
} 
</script> 
+0

代碼用小的解釋是更好:) – 2012-01-09 13:42:42