【斗医】【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

目录
相关文章
|
2月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
271 4
|
6月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
6月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。
|
6月前
|
JSON 开发框架 自然语言处理
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
本文主要介绍了应用开发中的三大核心内容:生命周期管理、资源限定与访问以及多语言支持。在生命周期部分,详细说明了应用和页面的生命周期函数及其触发时机,帮助开发者更好地掌控应用状态变化。资源限定与访问章节,则聚焦于资源限定词的定义、命名规则及匹配逻辑,并阐述了如何通过 `$r` 引用 JS 模块内的资源。最后,多语言支持部分讲解了如何通过 JSON 文件定义多语言资源,使用 `$t` 和 `$tc` 方法实现简单格式化与单复数格式化,为全球化应用提供便利。
265 104
|
6月前
|
JavaScript 前端开发 API
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
本文介绍了HarmonyOS应用开发中的HML、CSS和JS语法。HML作为标记语言,支持数据绑定、事件处理、列表渲染等功能;CSS用于样式定义,涵盖尺寸单位、样式导入、选择器及伪类等特性;JS实现业务逻辑,包括ES6语法支持、对象属性、数据方法及事件处理。通过具体代码示例,详细解析了页面构建与交互的实现方式,为开发者提供全面的技术指导。
286 104
|
6月前
|
开发框架 编解码 JavaScript
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(一)
该文档详细介绍了一个兼容JS的类Web开发范式的方舟开发框架,涵盖概述、文件组织、js标签配置及app.js等内容。框架采用HML、CSS、JavaScript三段式开发方式,支持单向数据绑定,适合中小型应用开发。文件组织部分说明了目录结构、访问规则和媒体文件格式;js标签配置包括实例名称、页面路由和窗口样式信息;app.js则描述了应用生命周期与对象管理。整体内容旨在帮助开发者快速构建基于方舟框架的应用程序。
288 102
|
7月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
9月前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
2021 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
578 67

热门文章

最新文章