将变量传递给struts 2标记上的javascript事件

时间:2012-01-08 20:31:51

标签: javascript select struts2

我有一个简单但烦人的问题 我有一个成功填充<s:select>标记的对象列表。标签如下(请不要介意西班牙语名称或信息:

<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>

所选值的id

2 个答案:

答案 0 :(得分:2)

我认为你在这里混合了两个概念: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。

答案 1 :(得分: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>