JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建

1 学习计划

1、jQuery easyUI中动态添加选项卡

2、jquery ztree插件使用

n 下载ztree

n 基于标准json数据构造ztree

n 基于简单json数据构造ztree(重点)

3、数据库建模工具PowerDesigner使用方式

4、myeclipse翻转引擎插件使用(了解)

5、项目底层代码构建(重点)

n 持久层代码抽取

n 表现层代码抽取

6、实现BOS项目登录和注销功能

jQuery easyUI中动态添加选项卡

l 用于动态添加一个选项卡

l 选中指定的选项卡和判断某个选项卡是否存在

<a id="but1" class="easyui-linkbutton">添加一个选项卡</a>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后,为上面的按钮绑定事件
                        $("#but1").click(function(){
                            //判断“系统管理”选项卡是否存在
                            var e = $("#mytabs").tabs("exists","系统管理");
                            if(e){
                                //已经存在,选中就可以
                                $("#mytabs").tabs("select","系统管理");
                            }else{
                                //调用tabs对象的add方法动态添加一个选项卡
                                $("#mytabs").tabs("add",{
                                    title:‘系统管理‘,
                                    iconCls:‘icon-edit‘,
                                    closable:true,
                                    content:‘<iframe frameborder="0" height="100%" width="100%" src="https://www.baidu.com"></iframe>‘
                                });
                            }
                        });
                    });
                </script>

jquery ztree插件使用

官网:ztree.me

目录结构:

l 在页面中引入ztree相关的文件:

<link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">

<script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>

<script type="text/javascript" src="../../../js/jquery.ztree.core-3.5.js"></script>

3.1 使用标准json数据构造ztree(了解)

                <!-- 展示ztree效果 :使用标准json数据构造ztree-->
                <ul id="ztree1" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后,执行这段代码----动态创建ztree
                        var setting = {};
                        //构造节点数据
                        var zNodes = [
                                      {"name":"节点一","children":[
                                                                    {"name":"节点一_1"},
                                                                    {"name":"节点一_2"}
                                                                ]},//每个json对象表示一个节点数据
                                      {"name":"节点二"},
                                      {"name":"节点三"}
                                      ];
                        //调用API初始化ztree
                        $.fn.zTree.init($("#ztree1"), setting, zNodes);
                    });
                </script>

3.2 使用简单json数据构造ztree(重点)

                <!-- 展示ztree效果 :使用简单json数据构造ztree-->
                <ul id="ztree2" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后,执行这段代码----动态创建ztree
                        var setting2 = {
                                data: {
                                    simpleData: {
                                        enable: true//使用简单json数据构造ztree节点
                                    }
                                }
                        };
                        //构造节点数据
                        var zNodes2 = [
                                          {"id":"1","pId":"2","name":"节点一"},//每个json对象表示一个节点数据
                                          {"id":"2","pId":"3","name":"节点二"},
                                          {"id":"3","pId":"0","name":"节点三"}
                                      ];
                        //调用API初始化ztree
                        $.fn.zTree.init($("#ztree2"), setting2, zNodes2);
                    });
                </script>

效果:

3.3 发送ajax请求获取json数据构造ztree

                <!-- 展示ztree效果 :发送ajax请求获取简单json数据构造ztree-->
                <ul id="ztree3" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后,执行这段代码----动态创建ztree
                        var setting3 = {
                                data: {
                                    simpleData: {
                                        enable: true//使用简单json数据构造ztree节点
                                    }
                                }
                        };

                        //发送ajax请求,获取json数据
                        //jQuery提供 的ajax方法:ajax、post、get、load、getJSON、getScript
                        var url = "${pageContext.request.contextPath}/json/menu.json";
                        $.post(url,{},function(data){
                            //调用API初始化ztree
                            $.fn.zTree.init($("#ztree3"), setting3, data);
                        },‘json‘);
                    });
                </script>

3.4 使用ztree提供的API为节点绑定事件

                <!-- 展示ztree效果 :发送ajax请求获取简单json数据构造ztree-->
                <ul id="ztree3" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后,执行这段代码----动态创建ztree
                        var setting3 = {
                                data: {
                                    simpleData: {
                                        enable: true//使用简单json数据构造ztree节点
                                    }
                                },
                                callback: {
                                    //为ztree节点绑定单击事件
                                    onClick: function(event, treeId, treeNode){
                                        if(treeNode.page != undefined){
                                            //判断选项卡是否已经存在
                                            var e = $("#mytabs").tabs("exists",treeNode.name);
                                            if(e){
                                                //已经存在,选中
                                                $("#mytabs").tabs("select",treeNode.name);
                                            }else{
                                                //动态添加一个选项卡
                                                $("#mytabs").tabs("add",{
                                                    title:treeNode.name,
                                                    closable:true,
                                                    content:‘<iframe frameborder="0" height="100%" width="100%" src="‘+treeNode.page+‘"></iframe>‘
                                                });
                                            }
                                        }
                                    }
                                }
                        };

                        //发送ajax请求,获取json数据
                        //jQuery提供 的ajax方法:ajax、post、get、load、getJSON、getScript
                        var url = "${pageContext.request.contextPath}/json/menu.json";
                        $.post(url,{},function(data){
                            //调用API初始化ztree
                            $.fn.zTree.init($("#ztree3"), setting3, data);
                        },‘json‘);
                    });
                </script>

数据库建模工具PowerDesigner使用方式

myeclipse翻转引擎插件使用

项目底层代码构建(重点)

6.1 持久层代码抽取

IBaseDao接口:
/**
 * 持久层通用接口
 * @author zhaoqx
 *
 * @param <T>
 */
public interface IBaseDao<T> {
    public void save(T entity);
    public void delete(T entity);
    public void update(T entity);
    public T findById(Serializable id);
    public List<T> findAll();
}

BaseDaoImpl<T>实现类:
/**
 * 持久层通用实现
 * @author zhaoqx
 *
 * @param <T>
 */
public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {
    //代表的是某个实体的类型
    private Class<T> entityClass;

    @Resource//根据类型注入spring工厂中的会话工厂对象sessionFactory
    public void setMySessionFactory(SessionFactory sessionFactory){
        super.setSessionFactory(sessionFactory);
    }

    //在父类(BaseDaoImpl)的构造方法中动态获得entityClass
    public BaseDaoImpl() {
        ParameterizedType superclass = (ParameterizedType) this.getClass().getGenericSuperclass();
        //获得父类上声明的泛型数组
        Type[] actualTypeArguments = superclass.getActualTypeArguments();
        entityClass = (Class<T>) actualTypeArguments[0];
    }

    public void save(T entity) {
        this.getHibernateTemplate().save(entity);
    }

    public void delete(T entity) {
        this.getHibernateTemplate().delete(entity);
    }

    public void update(T entity) {
        this.getHibernateTemplate().update(entity);
    }

    public T findById(Serializable id) {
        return this.getHibernateTemplate().get(entityClass, id);
    }

    public List<T> findAll() {
        String hql = "FROM " + entityClass.getSimpleName();
        return (List<T>) this.getHibernateTemplate().find(hql);
    }
}

6.2 表现层代码抽取

BaseAction代码:
/**
 * 表现层通用实现
 * @author zhaoqx
 *
 * @param <T>
 */
public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {
    //模型对象
    private T model;
    public T getModel() {
        return model;
    }

    //在构造方法中动态获取实体类型,通过反射创建model对象
    public BaseAction() {
        ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();
        //获得BaseAction上声明的泛型数组
        Type[] actualTypeArguments = genericSuperclass.getActualTypeArguments();
        Class<T> entityClass = (Class<T>) actualTypeArguments[0];
        //通过反射创建对象
        try {
            model = entityClass.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

实现BOS项目登录

登录页面:/login.jsp

第一步:调整login.jsp页面,为登录按钮指定单击事件,提交表单

第二步:创建UserAction,提供login登录方法

@Controller
@Scope("prototype")
public class UserAction extends BaseAction<User> {
    //属性驱动,接收页面输入的验证码
    private String checkcode;
    public void setCheckcode(String checkcode) {
        this.checkcode = checkcode;
    }

    @Autowired
    private IUserService userService;

    /**
     * 用户登录
     */
    public String login(){
        //从Session中获取生成的验证码
        String validatecode = (String) ServletActionContext.getRequest().getSession().getAttribute("key");
        //校验验证码是否输入正确
        if(StringUtils.isNotBlank(checkcode) && checkcode.equals(validatecode)){
            //输入的验证码正确
            User user = userService.login(model);
            if(user != null){
                //登录成功,将user对象放入session,跳转到首页
                ServletActionContext.getRequest().getSession().setAttribute("loginUser", user);
                return HOME;
            }else{
                //登录失败,,设置提示信息,跳转到登录页面
                //输入的验证码错误,设置提示信息,跳转到登录页面
                this.addActionError("用户名或者密码输入错误!");
                return LOGIN;
            }
        }else{
            //输入的验证码错误,设置提示信息,跳转到登录页面
            this.addActionError("输入的验证码错误!");
            return LOGIN;
        }
    }
}

第三步:提供UserService接口和实现类

@Service
@Transactional
public class UserServiceImpl implements IUserService{
    @Autowired
    private IUserDao userDao;
    /***
     * 用户登录
     */
    public User login(User user) {
        //使用MD5加密密码
        String password = MD5Utils.md5(user.getPassword());
        return userDao.findUserByUsernameAndPassword(user.getUsername(),password);
    }
}

第四步:提供UserDao接口和实现类

@Repository
public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao {
    /**
     * 根据用户名和密码查询用户
     */
    public User findUserByUsernameAndPassword(String username, String password) {
        String hql = "FROM User u WHERE u.username = ? AND u.password = ?";
        List<User> list = (List<User>) this.getHibernateTemplate().find(hql, username,password);
        if(list != null && list.size() > 0){
            return list.get(0);
        }
        return null;
    }
}

第五步:配置struts.xml

<!-- 用户管理 -->
        <action name="userAction_*" class="userAction" method="{1}">
            <result name="login">/login.jsp</result>
            <result name="home">/index.jsp</result>
        </action>

注销功能

将session销毁,跳转到登录页面

原文地址:https://www.cnblogs.com/xieyupeng/p/8442911.html

时间: 2024-12-28 17:34:25

JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建的相关文章

JAVAEE——BOS物流项目03:学习计划、messager、menubutton、登陆拦截器、信息校验和取派员添加功能

1 学习计划 1.jQuery easyUI messager使用方式 n alert方法 n confirm方法 n show方法 2.jQuery easyUI menubutton使用方式 3.自定义拦截器实现用户未登录自动跳转到登录页面 n 创建拦截器 n 注册拦截器 4.基于ajax实现用户修改密码功能 n easyUI中validatebox校验功能 n 发送ajax请求 n 服务端修改数据库 5.基础设置部分需求分析 6.创建基础设置部分数据表 n 取派员表 n 区域表 n 分区表

JAVAEE——BOS物流项目04:学习计划、datagrid、分页查询、批量删除、修改功能

1 学习计划 1.datagrid使用方法(重要) n 将静态HTML渲染为datagrid样式 n 发送ajax请求获取json数据创建datagrid n 使用easyUI提供的API创建datagrid(掌握) 2.实现取派员分页查询 n 调整页面基于datagrid发送ajax请求 n 创建PageBean封装分页参数 n 定义通用分页查询方法 n 将分页查询结果转为json返回 3.取派员批量删除 n 页面调整 n 服务端实现 4.取派员修改 n 页面调整 n 服务端实现 2 data

JAVAEE——BOS物流项目05:OCUpload、POI、pinyin4J、重构分页代码、分区添加、combobox

1 学习计划 1.实现区域导入功能 n OCUpload一键上传插件使用 n 将文件上传到Action n POI简介 n 使用POI解析Excel文件 n 完成数据库操作 n 使用pinyin4J生成简码和城市编码 2.区域分页查询 n 页面调整 n 服务端实现 3.重构分页代码 n BaseAction n 子类Action 4.分区添加功能 n 什么是分区 n 页面调整(combobox使用) n 服务端实现 2 实现区域导入功能 2.1 jquery OCUpload一键上传插件使用 O

JAVAEE——BOS物流项目12:角色、用户管理,使用ehcache缓存,系统菜单根据登录人展示

1 学习计划 1.角色管理 n 添加角色功能 n 角色分页查询 2.用户管理 n 添加用户功能 n 用户分页查询 3.修改Realm中授权方法(查询数据库) 4.使用ehcache缓存权限数据 n 添加ehcache依赖 n 配置缓存管理器 5.系统菜单根据登录人展示 n 调整页面ajax请求地址 n 服务端查询菜单数据 2 角色管理 2.1 添加角色功能 2.1.1 页面调整 首先先完善pages/admin/function_add.jsp添加权限的页面,把下拉框改为combotree 他的

VS自定义项目模板:[9]动态添加项目文件

方法/步骤 为自定义向导项目添加设置窗体inputForm. 使用多选框来选择哪些类需要添加.   在inputForm窗体类中添加GetRemoveList来获取不需要添加的类名.   RunStarted方法中,将模板参数传递给inputForm窗体,并展现该窗体.   使用ProjectFinishedGenerating方法,项目创建结束时移除不需要的文件.   编译后,将其重新安装到全局程序集缓存中. 进行测试,仅选择MyObj.cs类,创建的项目中也不包含WizardTest.cs类

layui动态添加选项卡

<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <title>

201671010116. 2016-2017-3《Java程序设计》 Java学习计划

Java学习计划 周次 (阅读/编写)代码行数 发布博客量/博客评论数量 课余/课堂学习时间小时() 最满意的编程任务 1 50/13 1/2 8/6 安装JDK和Eclipsse 2 200/70 2/0 20/6 对数的分离,求和运算 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

在CFormView或对话框中动态添加CScrollView、CFormView

在CFormView或对话框中动态添加CScrollView.CFormView 本代码可以在CFormView中,根据事先画好的控件位置创建CScrollView 也可以在CDialog中创建CScrollView.CFormView等 注: 若以下代码放在CMainRightView::OnCreate(LPCREATESTRUCT lpCreateStruct)内,则GetDlgItem()函数将调用失败,因为此时控件都还未被创建! void CMainRightView::OnIniti

如何获取jQuery中动态添加的元素

一.问题描述 用jQuery的append()方法动态添加了一段html代码之后,发现在为新添加的元素绑定click事件时无法获取该新元素. 二.解决方法 度娘推荐的方法基本是用live()方法 live()的官方定义和用法: live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数.通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素). live()的详细使用方法可以查看jQuery live() live()和