EasyUI–表单加载内存/本地/服务端数据

简介: 在不使用前端语言JS(jQuery等前端框架本质上也是JS)时,如果我们想往表单里面放入数据,该怎么办?比如从文件中、从数据库查出用户信息显示在表单中。

无非借助于后端语言如Java,然后通过Servlet获取数据,浏览器端通过请求服务器,实现这一过程。而本篇将演示通过JS语言加载内存(实际上就是浏览器客户端逻辑)、本地(其实是服务器上的文件)及服务端(通过Servlet)数据。

先看一下页面设计(注意注释):

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>表单加载数据Demo</title>
  <!-- 以下四行代码用于导入EasyUI库 -->
  <link rel="stylesheet" type="text/css" href="easyui/themes/default/easyui.css">
  <link rel="stylesheet" type="text/css" href="easyui/themes/icon.css">
  <script type="text/javascript" src="easyui/jquery.min.js"></script>
  <script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
  <!-- script标签内部放置JS代码,因为EasyUI是基于jQuery开发的,所以基本上都是jQuery风格的代码 -->
  <script type="text/javascript">
  </script>
</head>
<body>
  <h2>加载数据Demo</h2>
  <!-- 使用easyui-panel面板 -->
  <div class="easyui-panel" title="个人信息" style="width:100%;max-width:400px;padding:30px 60px;">
    <!-- form的id为main_form -->
    <form id="main_form" method="post">
      <div style="margin-bottom:24px">
        <!-- 注意required:true是非常好用的一个data-options选项,保证该输入框不能为空 -->
        <input class="easyui-textbox" name="userName" style="width:100%" data-options="label:'姓名',required:true">
      </div>
      <div style="margin-bottom:24px">
        <input class="easyui-textbox" name="userEmail" style="width:100%" data-options="label:'邮箱',required:true,validType:'email'">
      </div>
      <div style="margin-bottom:24px">
        <!-- 此处使用easyui-combobox组件 -->
        <select class="easyui-combobox" name="userSex" label="性别" style="width:100%">
          <option value="0">男</option>
          <option value="1">女</option>
        </select>
      </div>
    </form>
  </div>
  <div style="margin:32px 0;">
    <!-- 此处注意使用javascript:void(0)比#要干净,因为使用#后网址栏多了个#-->
    <!-- 注意onclick绑定的js方法 -->
    <a href="javascript:void(0)" class="easyui-linkbutton" onclick="loadMemory()">加载内存数据</a>
    <a href="javascript:void(0)" class="easyui-linkbutton" onclick="loadFile()">加载文件数据</a>
    <a href="javascript:void(0)" class="easyui-linkbutton" onclick="loadRemote()">加载后端数据</a>
    <a href="javascript:void(0)" class="easyui-linkbutton" onclick="clearData()">清空数据</a>
  </div>
</body>
</html>


注意已经有了4个按钮,分别绑定了四个事件,接下来我们只需要在script标签中添加事件就好了,我们来逐个处理这些事件。


第一个,清空数据clearData,非常简单,这就是库(框架)的作用


/*选中main_form后直接调用form('clear')即可清空表单数据*/

 function clearData(){

  $('#main_form').form('clear');

 }

1

2

3

4

第二个,加载内存数据:


/*加载内存数据,直接指定控件name对应的值即可*/

 function loadMemory(){

  $('#main_form').form('load',

   {userName:'猫哥',userEmail:'maoge@maoge.com',userSex:'0'}

  );

 }

1

2

3

4

5

6

第三个,需要从文件中加载json格式的数据,首先在WebRoot下新建一个文件夹json,然后在json文件夹下新建user_data.json文件,代码如下,注意EasyUI能自动解析json,智能匹配表单,所以按照json的格式放好数据就OK了。


{

"userName":"test",

"userEmail":"maoge@maoge.com",

"userSex":"1"

}

1

2

3

4

5

/*加载文件数据,直接写文件路径即可*/

 function loadFile(){

  $('#main_form').form('load', 'json/user_data.json');

 }

1

2

3

4

最后是从Servlet加载数据,新建一个UserServlet和User类如下(web.xml中配置对应url-pattern为/UserServlet):

public class User {
  private String userName;
  private String userEmail;
  private String userSex;
  public String getUserName() {
    return userName;
  }
  public void setUserName(String userName) {
    this.userName = userName;
  }
  public String getUserEmail() {
    return userEmail;
  }
  public void setUserEmail(String userEmail) {
    this.userEmail = userEmail;
  }
  public String getUserSex() {
    return userSex;
  }
  public void setUserSex(String userSex) {
    this.userSex = userSex;
  }
}
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    this.doPost(request, response);
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    response.setCharacterEncoding("utf-8");
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    User user=new User();
    user.setUserEmail("panda@pp.com");
    user.setUserName("熊猫大哥大");
    user.setUserSex("0");
    //此处需将user数据以json格式返回
  }
}

之前已经说过,EasyUI需要后台以json格式返回数据,于是首先在WebRoot下WEN-INF下lib下放入json需要的jar包(具体jar包自行搜索)。如图:

image.png

OK,此时将doPost完善为:

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
public class UserServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    this.doPost(request, response);
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    response.setCharacterEncoding("utf-8");
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    User user=new User();
    user.setUserEmail("panda@pp.com");
    user.setUserName("熊猫大哥大");
    user.setUserSex("0");
    //此处需将user数据以json格式返回
    String result = JSONObject.fromObject(user).toString();
    System.out.println(result);//测试
    out.print(result);
  }
}

OK,我们直接访问http://127.1.1.1:8080/EasyuiDemo/UserServlet页面返回值为{"userEmail":"panda@pp.com","userName":"熊猫大哥大","userSex":"0"},可见该数据跟user_data.json数据格式都是json格式的,所以前端可直接写为:

/*通过servlet加载后端数据*/
    function loadRemote(){
      $('#main_form').form('load', '/EasyuiDemo/UserServlet');  
    }

至此我们应该完全了解了使用json的便捷性和锋利性,因为有了json这个标准以及Java语言(及各类后端语言)、Javascript语言(及各类前端框架)对json的支持,我们可以不用写任何代码完成json数据与前后端的交互,这就是标准(约定)的意义。

相关文章
|
24天前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
52 11
|
4月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
417 0
|
2月前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
|
2月前
|
缓存 监控 Java
在使用 Glide 加载 Gif 动画时避免内存泄漏的方法
【10月更文挑战第20天】在使用 Glide 加载 Gif 动画时,避免内存泄漏是非常重要的。通过及时取消加载请求、正确处理生命周期、使用弱引用、清理缓存和避免重复加载等方法,可以有效地避免内存泄漏问题。同时,定期进行监控和检测,确保应用的性能和稳定性。需要在实际开发中不断积累经验,根据具体情况灵活运用这些方法,以保障应用的良好运行。
|
2月前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
91 1
|
2月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
2月前
|
监控 Java easyexcel
面试官:POI大量数据读取内存溢出?如何解决?
【10月更文挑战第14天】 在处理大量数据时,使用Apache POI库读取Excel文件可能会导致内存溢出的问题。这是因为POI在读取Excel文件时,会将整个文档加载到内存中,如果文件过大,就会消耗大量内存。以下是一些解决这一问题的策略:
216 1
|
2月前
|
缓存 安全 Java
使用 Java 内存模型解决多线程中的数据竞争问题
【10月更文挑战第11天】在 Java 多线程编程中,数据竞争是一个常见问题。通过使用 `synchronized` 关键字、`volatile` 关键字、原子类、显式锁、避免共享可变数据、合理设计数据结构、遵循线程安全原则和使用线程池等方法,可以有效解决数据竞争问题,确保程序的正确性和稳定性。
52 2
|
2月前
|
存储 编译器
数据在内存中的存储
数据在内存中的存储
42 4
|
2月前
|
存储 机器学习/深度学习 人工智能
数据在内存中的存储
数据在内存中的存储