我有一个简单但烦人的问题
我有一个成功填充<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>
答案 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>