微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax请求servlet并局部刷新jsp页面

ajax请求servlet并局部刷新jsp页面

一、需求

用户在使用复选框时,复选框的选项可能随用户的操作而发生变化,这时需要刷新该复选框选项,同时做到不刷新整个页面,也就是只刷新jsp页面的一部分,使用ajax异步请求可以实现。

在这里插入图片描述

二、实现

2.1 复选框表单

<form action="servlet/mergeRdfServlet" method="post">
  <div id="refreshCheckBox"></div> <!--待填充复选框-->
  <div>
    <button type="button">Cancel</button>
    <button type="button" id="btnRefresh">Refresh</button><!--刷新按钮-->
    <button type="submit">Merge</button> <!--提交按钮-->
  </div>
</form>

2.2 ajax请求

$(document).on("click","#btnRefresh",function(){
  $.ajax({
    url:"servlet/refreshServlet", //请求servlet路径
    type:"POST", //POST请求
    async:true, //异步请求
    success:function(data){ //请求成功,data为sevlet返回的数据
      $("#refreshCheckBox label,br").remove(); //清除原本复选框
      var json = eval("("+data+")"); //将servlet返回的json数组转换为js对象
      
      //动态填充复选框
      if(json.length > 0){
        for(var i=0; i<json.length; i++){
          var label = document.createElement("label");
                         var input = document.createElement("input");
                         input.type="checkBox";
                         input.name="filesName";
                         input.value=json[i]; //复选框赋值
                         label.appendChild(input); //使用appendChild添加标签
                         var span = document.createElement("span");
                         span.innerText=json[i];
                         label.appendChild(span);
                         var br = document.createElement("br");
                         document.getElementById("refreshCheckBox").appendChild(label);
                         document.getElementById("refreshCheckBox").appendChild(br);
        }
      }
    },
    error:function(){ //请求失败
      alert("Something Wrong")
    }
  })
})

2.3 servlet

@WebServlet("/refreshServlet")
public class RefreshServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws servletexception, IOException {
        req.setCharacterEncoding("utf-8");
        //获取RDF文件名
        String path = "src/main/webapp/publish/RDF";
        File f = new File(path);
        File[] files = f.listFiles();
        ArrayList<String> arrayList = new ArrayList<>();
        if(files != null){
            for (File file : files) {
                String filename = file.toString().substring(file.toString().lastIndexOf("/") + 1);
                if (filename.endsWith(".ttl")) {
                    arrayList.add(filename);
                }
            }
        }
        //ArrayList转为JSON数组,并将数据返回给ajax
        String[] filesName = arrayList.toArray(new String[0]);
        JSONArray jsonArray = (JSONArray) JSONArray.toJSON(filesName);
        PrintWriter out;
        resp.setCharacterEncoding("utf-8");
        out = resp.getWriter();
        out.write(jsonArray.toString());
        out.flush();
        out.close();
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws servletexception, IOException{
        this.doGet(req,resp);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐