JAVA JSP SELECT 控件onchange()

有什么办法 可以在 onchange 方法里根据select控件所选的值改变 ?
改变是 当选择一个值后 还需要经过一次数据库查询;

比如 select 所选的 是 KK;
那我就要经过一次查询 ;先把KK这个值 传给 后台经过查询 "from User user where user.name='"+kk+"'";

这整个思路是怎样子的?

呃,我的第一反应是用ajax……

不过,应该可以在onchange的JS方法里面写submit提交表单,然后去后台数据库查询返回结果又跳转到这个页面,不过这样的话,页面会刷新一次追问

我没学过ajax 可以帮我写一个吗 或者给一个例子给我看嘛? 谢谢;

第二种方法不怎么适合哦。。

追答

呃,没有学过ajax的话,直接的ajax代码理解起来比较难,我看你的查询语句是hql,如果你的框架是SSH的话,可以去看看dwr框架,支持从页面直接调用后台的java方法,这个用起来比较简单也很实用,也比jquery和json的ajax简单

追问

哎 看了一下dwr的 还是不知道怎么表达 好;

function vv()
{
var checkValue=$("#kk").val();
document.getElementById('vv').value=checkValue;
List list= Bs.listByHQL("from AirDifi airDifi where airDifi.vdrcode='"+checkValue+"'");//不行的语句

}

追答

不是这样哦,dwr是像调用js一样调用后台代码

也就是说,后台代码该写哪里就写哪里,比如你的数据库查询,就写在以前的数据访问层

如果你还有业务逻辑层的话,通过配置文件配置一下,然后能通过dwr框架直接访问业务逻辑类的方法~呃,我去看看有没有现成的例子,好久没写啦~

追问

但是 我也要传数据 Bs.listByHQL("from AirDifi airDifi where airDifi.vdrcode='"+checkValue+"'");

然后 根据 所选的值 改变到文本框去。。

你能写一个吗???? 这个很重要对我 ;
谢谢

追答

首先要有lib文件,这个你应该从网上找得到吧,导入项目,然后在WEB-INF下面创建dwr.xml,如果用了spring的话就这样写:

JUserAction是java类在JS里面使用时候的名字,userAction就是后台类,我这里用的action,你也可以用业务逻辑类或者数据访问类,但是一定是要在spring里面注入了的,名字也要注意~是用于数据类型转换的,普通数据可以直接转换,自己创建的对象就要手动写,简单来说就是实体类,你懂的~

然后就是业务逻辑,这个应该不用我写了吧?好吧,我还是写一下
public User queryUserById(int id) {
String hql="from User as u where u.id="+id;
return (User)super.getHibernateTemplate().find(hql).get(0);
}
也就是说什么呢,只要有一个ID就万事大吉了是不是?

那么,最后一步,jsp页面

这三个必须有,不然绝对不行,注意第一个的JUserAction.js,很眼熟?额,这个要和配置文件里面一样,名字的话自己取吧,两个对应就可以
然后写JS代码:
function changeUser(){
JUserAction.queryUserById(1,userBack); //这里假设id是1,这个怎么改变你应该会吧?下拉列表获取value就是了,第二个参数是下面的回调方法名
}
function userBack(result){
document.getElementById("username").innerText=result.userName;
}
回调函数就是用来处理返回参数的,比如显示,返回的user对象名字叫result,所以可以直接点出实体类的属性,最后的最后,调用JS,你要的是下拉表,我这里为了方便用按钮,其实都差不多

喔~还有~web.xml要配置一个servlet,你应该配了吧?配了的话就应该能成功运行了,注意的地方比较多,细心一点

追问

报错了 A request has been denied as a potential CSRF attack.

请问可以留下QQ帮忙吗 十分感谢!

追答

我以前没有遇到这个问题,搜了一下,是因为版本更新了,你的web.xml配置dwr的部分应该这样写:

dwr-invoker
uk.ltd.getahead.dwr.DWRServlet

debug
true

crossDomainSessionSecurity
false

再试试吧

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-01-12
最简单 就是在onchange 方法 直接 open url 或者请求刷新页面

剩下 就是在onchange方法里面 ajax 异步请求数据 然后 填充页面追问

我没学过ajax 可以帮我写一个吗 或者给一个例子给我看嘛? 谢谢;

因为是希望 自动更新 而不用刷新页面这么麻烦;

追答

你搜一下 网上好多例子的

第2个回答  2012-01-13
如果我理解没有错的话, 这是异步交互 需要用到Ajax

JAVA JSP SELECT 控件onchange()
不过,应该可以在onchange的JS方法里面写submit提交表单,然后去后台数据库查询返回结果又跳转到这个页面,不过这样的话,页面会刷新一次

<select>控件中,选中第一个值是不会触发onchange事件的,如何使选中第一...
一般情况下select的第一个选项是默认选项,当你选中第一个项时,由于值没有改变,所以是不会触发onchange事件的。解决这个问题并没有什么完美的办法,一般你可以增加一个空值的项作为第一选项,比如<option>请选择<\/option>,这样原来的第一项就变成了第二项,点击该项值就有所改变了,就会触发onchange...

JSP的onchange具体用法和举例
onchange就是在你改变下拉框的值的时候会触发的一个事件。比如你原来的 select 什么都没有选择,当你改变它的值,选择 产品名称 的时候就会触发这个事件。有一种情况就是,当你选择了产品名称,你点击下拉框了,但是你没有改变值,就是说值还是产品名称的话,是不会触发onchange事件的。它必须是改变值...

请问select里的onChange="document.depform.submit();">什么意思?_百 ...
onchange()是javascript中的一个事件函数,它的意思是如果 select中的option项做的修改,则马上提交depform表单

select中onchange的用法
onmousedown 单击一次就查询一次,所以每选择一次就查询一次,增加了数据库的负担。每次选择至少要查询两次(一次是在数据库加载数据,一次是选择选项时又触发一次,)咧:<select name="expireDay" id="expireDay" class="form-control"onchange="searchChange(this.options[this.options.selectedIndex]....

jsp<select>默认值不触发onchange事件 如何调用其他js函数
在 页面最下面写js <script language="JavaScript"> var pro = 当前省份下拉框的值;getCityBranch(pro);<\/script>

JSP 实现两个select下拉框的数据联动,要求根据第一个下拉式选择的内容联...
首先进入页面的时候,第一个select的内容是从数据库查询出来的,这个很简单就能实现。然后在这个select控件上加上onchange事件,onchange事件中获取当选select选中的value 提交到后台,首先将页面中的内容存起来,比如刚才的那个内容使用setAttribute,存起来,然后在获取一次第一个select控件的信息,然后根据页面被...

jsp中,怎么使用onchange事件,把select下拉列表中所要显示的内容显示出来...
从数据库读出来的内容放到select下拉框里,点击下拉条目显示对应内容可通过onchange事件

JSP中select选中触发事件
用javascrpt实现,在select标签的onchange属性触发javascript事件 可以给自定义标签span设定一个id 然后用javascript的document.getElementById(id).innerHTML=""就可以实现了

jsp页面中select标签中怎么加checkbox实现多选?
使用JSP页面代码:代码如下:<table> <tr> <td width="400px" align="left">入学批次:<SELECT NAME="grade"id="grade" onchange="refreshEduLevelAndSpecialAjax();"> \/\/选择入学批次会刷新层次和专业 <OPTION VALUE="0"> --请选择-- <c:forEach items="${gradeInfo}" var="gradeInfo"...

相似回答
大家正在搜