JAVAEE——BOS物流項目02:學習計劃、動態添加選項卡、ztree、項目底層代碼構建

来源:https://www.cnblogs.com/xieyupeng/archive/2018/02/11/8442911.html
-Advertisement-
Play Games

1 學習計劃 1、jQuery easyUI中動態添加選項卡 2、jquery ztree插件使用 n 下載ztree n 基於標準json數據構造ztree n 基於簡單json數據構造ztree(重點) 3、資料庫建模工具PowerDesigner使用方式 4、myeclipse翻轉引擎插件使用 ...


 

1 學習計劃

1jQuery easyUI中動態添加選項卡

2jquery ztree插件使用

下載ztree

基於標準json數據構造ztree

基於簡單json數據構造ztree(重點)

3、資料庫建模工具PowerDesigner使用方式

4myeclipse翻轉引擎插件使用(瞭解)

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

 

目錄結構:

 

 

 

在頁面中引入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>
View Code

 

資料庫建模工具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銷毀,跳轉到登錄頁面

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文主要介紹Hibernate如何實現一對多、多對多表,實現相關操作。 ...
  • 這是畢業校招二面時遇到的手寫編程題,當時剛剛開始學習python,整個棧寫下來也是費了不少時間。畢竟語言只是工具,只要想清楚實現,使用任何語言都能快速的寫出來。 何為最小棧?棧最基礎的操作是壓棧(push)和退棧(pop),現在需要增加一個返回棧內最小值的函數(get_min),要求get_min函 ...
  • 記憶體限制:256 MiB時間限制:1000 ms標準輸入輸出 題目類型:傳統評測方式:文本比較 上傳者: 匿名 記憶體限制:256 MiB時間限制:1000 ms標準輸入輸出 題目類型:傳統評測方式:文本比較 上傳者: 匿名 提交提交記錄統計討論測試數據 題目描述 這是一道模板題。 輸入兩個多項式,輸 ...
  • Description 在組合博弈論中,Nim游戲是一個非常經典的問題,Nim游戲可描述如下:有n堆石子,每堆石子數分別為a1, a2, …, an (ai≥0)。現有兩人輪流從這n堆中取石子,每次必須從某一堆中取任意多的石子,至少要取一個,必須從同一堆中取石子,並且不能超過這一堆石子的總數。如果某 ...
  • 聯編的概念 聯編是指一個電腦程式自身彼此關聯的過程,在這個聯編過程中,需要確定程式中的操作調用(函數調用)與執行該操作(函數)的代碼段之間的映射關係。 意思就是這個函數的實現有多種,聯編就是把調用和對應的實現進行映射的操作。按照聯編進行的階段不同,可分為靜態聯編和動態聯編。 靜態聯編 靜態聯編工作 ...
  • 前言 當前大多數app都有查找附近的功能, 簡單的有查找周圍的運動場館, 複雜的有滴滴, 摩拜查找周圍的車輛. 本文主要闡述查找附近地點的一般實現. 搜索附近的人也是同樣的思路. 方案比較 方案1 (性能還不錯) 資料庫直接存經緯度, 然後計算矩形邊界值, 走索引查詢 方案2 (還沒試過) 將經緯度 ...
  • python字元串格式化兩種方式:百分號方式、format方式 用百分號字元串拼接 列印浮點數: 列印百分比: format ...
  • 本文主要介紹Hibernate主鍵的生成策略、持久化類的編寫規則、 持久化對象的三種狀態、hibernate的緩存、Hibernate的事務。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...