美文网首页
jsp页面中局部模块数据刷新的实现

jsp页面中局部模块数据刷新的实现

作者: ClearWang | 来源:发表于2017-07-29 12:50 被阅读0次

    需求如下图所示:


    1.首先想到的方式是:

    给发布类型(select标签)添加onchange()事件,值不同,调用不同的action做数据处理,转发到不同的jsp页面上去显示:代码如下:

    <script language="javascript">

             function reUpdate(val) {

             if(val=="1") {

                   document.form.action="firmware!gotoaddConf.do";

                   document.form.submit();

              }else if(val=="2") {

                    document.form.action="firmware!gotoaddConf2.do";

                    document.form.submit();

               }

    }

    </script>

    <select name="releaseType1"style="width=220"id="select1"onchange="reUpdate(this.value)">

    <optionvalue ="1">发布版本option>

    <%--内测版本--%><optionvalue ="2"selected>公测版本option>

    select>

    对应的struts.xml部分:(url中以firmware!开头的网页都会去对应的action中找对应的方法,例如这里的GetFirmwareAction,去找对应的方法,例如http://localhost:8090/firmware!gotoaddConf.do就会去GetFirmwareAction中找gotoaddConf的方法。gotoaddConf方法返回值即代表要转发的jsp页面的逻辑名称,例如gotoaddConf方法会返回一个“addConf”的字符串,就会去structs.xml中找对应的jsp页面,这里是addfirwareconf.jsp.如何做到的?这就是使用架构的好处

    <actionname="firmware!*"class="com.yf.weloop.action.GetFirmwareAction"method="{1}">

    <resultname="addConf">/admin/addfirwareconf.jspresult>

    <resultname="addConf2">/admin/addfirwareconf2.jspresult>

    action>

    对应的action和响应的方法:

    public classGetFirmwareActionextendsBaseAction {

    ...

    publicString gotoaddConf() {list=firmwareService.getfirmtype();list2=firmwareService.getFirmwareVersion();

    return"addConf";

    }

    publicString gotoaddConf2() {list=firmwareService.getfirmtype();list2=firmwareService.getFirmwareVersion();

    return"addConf2";

    }

    ...

    }

    这种方式的一个缺点是:需要在action中新建不同的方法处理不同的响应逻辑,需要处理多个jsp页面,显示不同的页面,最主要的问题是整个页面都会刷新。


    2.方式2:使用ajax技术

    方法1:

    <scripttype="text/javascript"src="<%=request.getContextPath()%>/js/jquery-1.10.2.js">script>

    (将ajax函数封装在.js文件中,所以要引入该js文件,如下方式引入)

    <scriptsrc="<%=request.getContextPath()%>/js/myajax.js">script>

    myajax.js中:

    function ajaxUpdate1(val) {

    var xmlhttp;

    if(window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera,      Safarixmlhttp=newXMLHttpRequest();

    }else{// code for IE6, IE5xmlhttp=newActiveXObject("Microsoft.XMLHTTP");

    }

    xmlhttp.onreadystatechange=function() {

    if(xmlhttp.readyState==4&&xmlhttp.status ==200) {

    varstr=xmlhttp.responseText;

    varobj=eval("("+str+")");//将数据转换成json类型

    if(val =="1") {

    if(obj[0].wn02b01 !=null) {

    $("#firmwareVersion1").val(obj[0].wn02b01);

    }

    }else if(val =="2") {

    if(obj[1].wn02b01 !=null) {

    $("#firmwareVersion1").val(obj[1].wn02b01);

    }

    }

    }

    }

    xmlhttp.open("GET","firmware!getData.do",true);

    xmlhttp.send();

    }

    方法2:

    myajax中:

    functionajaxUpdate3(val) {

    $.ajax({

    type:"GET",

    url:"firmware!getData.do",

    async:true,

    //dateType: "json",   

    data:null,

    success:function(data) {

    var obj=eval("("+data+")");//将数据转换成json类型if(obj[0].wn02b01 !=null) {

    $("#firmwareVersion1").val(obj[0].wn02b01);

    }

    },

    error:function(e) {

    alert("获取数据失败!");

    }

    });

    }else if(val =="2") {

    $.ajax({

    type:"get",

    async:true,

    //dateType:"json",

    data:null,

    success:function(data) {

    varobj=eval("("+data+")");//将数据转换成json类型// alert("调用数据成功!");

    if(obj[1].wn02b01 !=null) {

    $("#firmwareVersion1").val(obj[1].wn02b01);

    }

    },

    error:function(e) {

    alert("获取数据失败!");

    }

    });

    }

    }

    注意:ajax的以上两中方法都需要导入jquery-1.10.2.js当然,可以使用不同的版本。

    Ajax的最大的好处是,只刷部分模块,而且可以实现js和服务器之前的异步(没有获得响应之前我可以做我的事情而不是一直等待),这样执行操作也会快很多。

    相关文章

      网友评论

          本文标题:jsp页面中局部模块数据刷新的实现

          本文链接:https://www.haomeiwen.com/subject/hsoqlxtx.html