【斗医】【14】Web应用开发20天

简介:
原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://qingkechina.blog.51cto.com/5552198/1418856

   一般医院都会设置内科、外科、妇产科、儿科、眼科、口腔科、耳鼻喉科、皮肤科、麻醉科、传染科、美容科等,从而可以根据病人的不同情况进和分流,每当进入医院时就想起了门面模式,有点扯远了。当下战书时为了描述清楚具体症状,所以想先设置科室,从而使症状描述更准确。下面来实现科室选择。

1、创建科室数据库

CREATE TABLE DEPARTMENT(depId int PRIMARY KEY NOT NULL, depName VARCHAR(64)) ENGINE=InnoDB DEFAULT CHARSET=UTF8


2、插入科室记录

INSERT INTO DEPARTMENT VALUES(1, '内科')

INSERT INTO DEPARTMENT VALUES(2, '外科')

INSERT INTO DEPARTMENT VALUES(3, '妇产科')

INSERT INTO DEPARTMENT VALUES(4, '儿科')

INSERT INTO DEPARTMENT VALUES(5, '眼科')

INSERT INTO DEPARTMENT VALUES(6, '口腔科')

INSERT INTO DEPARTMENT VALUES(7, '耳鼻喉科')

INSERT INTO DEPARTMENT VALUES(8, '皮肤科')

INSERT INTO DEPARTMENT VALUES(9, '麻醉科')

INSERT INTO DEPARTMENT VALUES(10, '传染科')

INSERT INTO DEPARTMENT VALUES(11, '美容科')


3、新建DepartDAO类,通过Hibernate把DepartDAO对象与DEPARTMENT表对应起来,为了简单起见,这里不再列出DepartDAO类的具体代码,里面只是有depId和depName两个字段,以及这两个字段的get()&set()方法


4、创建DepartUtil类

package com.medical.server.util;


import java.util.List;

import org.hibernate.Criteria;

import org.hibernate.Session;

import org.hibernate.criterion.Restrictions;

import com.medical.frame.util.FrameDBUtil;

import com.medical.frame.util.FrameUtil;

import com.medical.server.dao.DepartDAO;


/**

 * 斗医系统服务端科室工具类

 * @author qingkechina 2014-03-28

 */

public class DepartUtil

{

    /**

     * 获取所有科室DAO对象集合

     */

    @SuppressWarnings("unchecked")

    public static List<DepartDAO> getDepartList()

    {

        Session session = FrameDBUtil.openSession();

        Criteria criteria = session.createCriteria(DepartDAO.class);

        List<?> depList = criteria.list();

        FrameDBUtil.closeSession();

        

        if (FrameUtil.isEmpty(depList))

        {

            return null;

        }

        return (List<DepartDAO>)depList;

    }

    

    /**

     * 通过科室ID查找科室DAO对象

     */

    public static DepartDAO getDepartById(int depId)

    {

        Session session = FrameDBUtil.openSession();

        Criteria criteria = session.createCriteria(DepartDAO.class);

        criteria.add(Restrictions.eq("depId", depId));

        List<?> depList = criteria.list();

        FrameDBUtil.closeSession();

        

        if (FrameUtil.isEmpty(depList))

        {

            return null;

        }

        

        DepartDAO depDao = (DepartDAO)depList.get(0);

        return depDao;

    }

}


6、定义获取科室数据配置信息

在war\WEB-INF\config\challenge下创建challenge-data.xml文件,里面填充如下内容:

<?xml version="1.0" encoding="UTF-8"?>

<business-config>

    <!--获取部门科室类别信息-->

    <business name="gainDepart" business-class="com.medical.server.data.DepartDataAction" />

</business-config>


7、创建DepartDataAction类

package com.medical.server.data;


import java.util.List;

import com.google.gson.Gson;

import com.medical.frame.FrameDefaultAction;

import com.medical.frame.FrameException;

import com.medical.server.dao.DepartDAO;

import com.medical.server.util.DepartUtil;


/**

 * 斗医系统获取科室信息处理类

 * @author qingkechina 2014-05-28

 */

public class DepartDataAction extends FrameDefaultAction

{

    /**

     * 全局Gson对象

     */

    private final static Gson gson = new Gson();

    

    @Override

    public String execute()

        throws FrameException

    {

        List<DepartDAO> departList = DepartUtil.getDepartList();

        return gson.toJson(departList);

    }

}


8、创建DepartDAO对象的数据表映射文件

在war\etc\mapping下创建depart.hbm.xml文件,里面填充如下内容:

<?xml version="1.0" encoding="utf-8"?>  

<!DOCTYPE hibernate-mapping PUBLIC  

        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  

        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  

  

<hibernate-mapping package="com.medical.server.dao">

    <class name="DepartDAO" table="DEPARTMENT">

        <id name="depId" column="depId" type="int" />

        <property name="depName" column="depName" />

    </class>

</hibernate-mapping>


9、修改challenge.js文件,在该文件加载后从服务端读取科室数据并渲染到HTML页面上

/**

 * 初始化科室类别数据

 */

 function initDepartData(){

    asyncRequest("gainDepart.data", null, function(result){

        var resultJson = eval(result);

        if(!resultJson){

            return;

        }


        $("#challenge_depart_id").empty();

   

        $.each(resultJson, function(i, item){

            var departItem = $("<div />").attr("class", "challenge_depart_item").attr("id", "challenge_depart_id_" + item.depId).text(item.depName);

            departItem.click(function(){

                if(CURRENT_SELECTED_ITEM != -1){

                    $("challenge_depart_id_" + CURRENT_SELECTED_ITEM).attr("class", "challenge_depart_item");

                }

                CURRENT_SELECTED_ITEM = item.depId;

                $("#challenge_depart_id_" + item.depId).attr("class", "challenge_depart_item_selected");

            });


            $("#challenge_depart_id").append(departItem);

        });

    });

}


10、渲染科室类别的页面样式

(1)修改challenge.html内容

<div class="challenge_text_desc">问题科室:</div>

<div class="challenge_text_desc">选择所属科室(必填):</div>

<div class="challenge_depart_wrapperid="challenge_depart_id">

     <textarea id="challenge_kind_id" placeholder="选择问题所属科室"></textarea>

</div>


(2)在challenge.css文件中增加如下CSS定义

.challenge_depart_wrapper{

    margin: 5px;

    line-height: 15px;

    background-color: #FFF;

    color: #222;

    overflow: hidden;

}


.challenge_depart_item, .challenge_depart_item_selected{

    float: left;

    min-width: 55px;

    width: auto;

    height: 22px;

    line-height: 22px;

    font-size: 13px;

    text-align: center;

    margin-right: 8px;

    background-color: #E1EAF2;

    border-radius: 6px;

    cursor: pointer;

}


.challenge_depart_item:hover, .challenge_depart_item_selected{

    color: #FFF;

    background-color: #225599;

}

在Eclipse中启动Tomcat后,在浏览器中输入http://localhost:8080/medical/challenge.act,查看此时的效果:

wKiom1OF7d2BnmiAAAD8eJagRvQ761.jpg


11、当用户没有登录时直接选择“下战书”菜单,此时会先让用户登录(这个功能是上篇博文实现),但用户的习惯是输入用户名和密码后直接回车,而不是用鼠标点击登录,所以这里还需要对“登录”按钮绑定回车事件

在login.js文件中增加绑定回车事件方法bindEvent4Login(),并在文档加载完后的方法中调用它。s

/**

 * 登录界面"确定"按钮绑定回车键盘事件

 */

function bindEvent4Login(){

    $(document).keydown(function(event){

        if(event.keycode == 13){

            systemUserLogin(false);

        }

    });

}


12、在IE9浏览器下进入“下战书”页面,发现内容并没有居中,这个是由于challenge.html中没有设置文档类型,解决办法在challenge.html最上面添加<!DOCTYPE HTML>的原因

13、在IE9浏览器下placeholder不生效,这里给出一个通用的解决方法。


【备注】:IE10已支持HTML5的placeholder属性


(1)在common.js中定义bindPlaceHolder()方法

/**

 * 为组件绑定placeholder属性,主要为了兼容IE

 */

function bindPlaceHolder(component){

    var isSupport = 'placeholder' in document.createElement('input');

    if(!isSupport){

        component.blur(function(){

            if(!component.val() || component.val() == component.attr("placeholder")){

                component.val(component.attr("placeholder"));

                component.css("color", "#999");

            }

        }).focus(function(){

            if(component.val() == component.attr("placeholder")){

                component.val("");

            }

            component.css("color", "");

        });


        // 使其失去焦点

        component.blur();

    }

}


(2)修改challenge.js文件,把initInputListener()重命名为initInputComponent(),修改内容如下:

/**

 * 初始化文本框

 */

function initInputComponent(){

    var textareaArray = new Array("challenge_title_id", "challenge_prescript_id", "challenge_challenger_id");

    $.each(textareaArray, function(i, item){

        var dynamicItem = $("#" + item);

        // 绑定PlaceHolder

        bindPlaceHolder(dynamicItem);


        // 设置textArea高度自适应

        dynamicItem.bind("input", function(event){

            this.style.height = this.scrollHeight - 2 + "px";

        });

    });

}



【备注】:待续.......

由于一篇完成一个功能点存在困难,所以会把一个功能点切为几个博文。同时由于工作和家庭原因,所以更改时间周期较长,请大家见谅







本文出自 “青客” 博客,请务必保留此出处http://qingkechina.blog.51cto.com/5552198/1418856

目录
相关文章
|
19天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
30天前
|
Web App开发 前端开发 开发工具
介绍Web开发的基础知识
介绍Web开发的基础知识
29 7
|
1月前
|
存储 资源调度 应用服务中间件
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
26 0
|
1月前
|
存储 前端开发 JavaScript
从前端到后端,探索现代Web开发技术
本文探索了现代Web开发技术的各个方面,包括前端和后端开发以及多种编程语言的应用。通过对JavaScript、Java、Python、C、PHP和Go等语言的介绍,深入探讨了前端和后端开发的基本原理和常用工具。同时,还涵盖了数据库技术在Web开发中的重要性和应用场景。无论你是初学者还是有经验的开发者,本文都能为你提供全面的视角和实用的知识,帮助你在Web开发领域取得更好的成果。
|
1月前
|
缓存 关系型数据库 API
后端开发:构建高效、可扩展的Web应用程序的关键
后端开发:构建高效、可扩展的Web应用程序的关键
20 0
|
5天前
|
JSON Java fastjson
Spring Boot 底层级探索系列 04 - Web 开发(2)
Spring Boot 底层级探索系列 04 - Web 开发(2)
15 0
|
5天前
|
安全 编译器 PHP
PHP 8.1版本发布:引领Web开发新潮流
PHP编程语言一直是Web开发的主力军,而最新发布的PHP 8.1版本则为开发者们带来了更多创新和便利。本文将介绍PHP 8.1版本的主要特性,包括更快的性能、新的语言功能和增强的安全性,以及如何利用这些功能来提升Web应用程序的质量和效率。
|
8天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
8天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
17天前
|
安全 前端开发 Java
Java Web开发知识点学习总结
Java Web开发涉及Java基础、Servlet、JSP、数据库操作(SQL+JDBC)、MVC设计模式、Spring框架、Hibernate ORM、Web服务(SOAP&RESTful)、安全认证(HTTP Basic/Digest/OAuth)及性能优化(缓存、异步、负载均衡)。
17 3