Struts2【UI標簽、數據回顯、資源國際化】

来源:https://www.cnblogs.com/Java3y/archive/2018/03/10/8542524.html
-Advertisement-
Play Games

Struts2UI標簽 Sturts2為了簡化我們的開發,也為我們提供了UI標簽...也就是 顯示頁面的標簽 ..... 但是呢,Struts2是服務端的框架,因此使用頁面的標簽是 需要在伺服器端解析然後再被瀏覽器解析 , 最後才顯示在頁面上的。 因此,它的性能是不夠HTML標簽好的...HTML直 ...


Struts2UI標簽

Sturts2為了簡化我們的開發,也為我們提供了UI標簽...也就是顯示頁面的標簽.....

但是呢,Struts2是服務端的框架,因此使用頁面的標簽是需要在伺服器端解析然後再被瀏覽器解析最後才顯示在頁面上的。因此,它的性能是不夠HTML標簽好的...HTML直接就能夠被瀏覽器解析

還有一點是:我們在寫網頁的時候,肯定是需要使用div+css的頁面佈局的使用Struts2UI標簽也沒法幹了....因此,除了有必要的話,才去使用Struts2UI標簽

簡單使用Struts2UI標簽


<%--我們發現,Struts2UI標簽用起來和HTML是差不多的--%>

<s:form id="form1" name="form1" method="POST" action="#">


    <%--輸入框數據,lable就相當於我們以前外邊寫的數據--%>
    <s:textfield label="用戶名" name="user.username"/>

    <%--密碼框--%>
    <s:password label="密碼" name="user.password"/>

    <%--提交按鈕--%>
    <s:submit value="提交"/>

</s:form>

當我們查看源文件的時候,發現Struts2UI標簽為我們自動加入了很多的標簽

這裡寫圖片描述

設置主題

上面已經說了,Struts2UI標簽為我們自動加入了很多的標簽,那有的時候,我們不想要,或者換一種風格的話,怎麼辦???

Struts2UI標簽也為我們提供了“主題”這樣的功能...

當我們在表單中設置theme屬性為simple之後...我們發現源文件Struts2自動為我們添加的標簽全沒了。

這裡寫圖片描述

如果我們想整個項目都是使用simple為主題的話,我們可以在配置文件中配置


  <constant name="struts.ui.theme" value="simple"/>

數據回顯

我們對數據回顯也不會陌生,在使用EL表達式的時候就已經用過了數據回顯了....那為啥數據回顯放在Struts2標簽這裡講解呢???因為Struts2也提供了數據回顯的支持,並且,使用數據回顯必須要使用Struts2的標簽...

這裡寫圖片描述

按照正常思路寫數據回顯

在Struts中按照正常思路寫數據回顯是這樣的:

  • 把數據放到request域中存儲,跳轉到對應的JSP頁面...

    public String login() {
        //把數據存儲到域中
        Map<String, Object> request = ActionContext.getContext().getContextMap();
    
        request.put("username", "zhongfucheng");
        request.put("password", "123");
    
        return SUCCESS;
    }
  • JSP頁面使用Struts2標簽,設置value屬性就可以進行數據回顯了


<s:form id="form1" name="form1" method="POST" action="" >


    <%--輸入框數據,lable就相當於我們以前外邊寫的數據--%>
    <s:textfield label="用戶名" name="user.username" value="%{#request.username}"/>

    <%--密碼框--%>
    <s:password label="密碼" name="user.password"/>

    <%--提交按鈕--%>
    <s:submit value="提交"/>

</s:form>
  • 效果:

這裡寫圖片描述


Struts2提供的數據回顯

其實,上面的代碼已經實現了數據回顯,但Struts2提供了一個更巧妙的方法

這裡寫圖片描述

也就是說,Struts2可以直接在name中就可以實現數據回顯了....要做的是:

  • 我們回顯的數據在根元素下的,也就是保存在CompoundRoot中的數據【保存在根元素的數據不用使用#號就可以獲取】

因此,我們把想要回顯的數據放在CompoundRoot下

  • 直接放在值棧的數據就是根元素數據

        //得到值棧對象
        ValueStack valueStack = ActionContext.getContext().getValueStack();
        valueStack.set("username","zhongfucheng");
  • 在JSP就可以直接獲取了

  <s:textfield label="用戶名" name="username"/>
  • 效果:

這裡寫圖片描述


Struts2標簽:checkboxlist

參考自博文:http://www.blogjava.net/koradji/articles/307399.html

語法:

<s:checkboxlist name="" list="" listKey="" listValue="" value="" />

  • name定義標簽名,用於接收畫面上選中的覆選框,故應與Action里定義的屬性一致,且多為數組;
  • list定義集合變數,用於輸出覆選框到畫面上,一般在Action里定義一個List或Map屬性;
  • listKey如果在Action里定義的是一個List,則往往會在List里定義一個Bean,它只有兩個屬性,其中一個(比如id)就在這裡設置;
    • 如果在Action里定義的是一個Map,則Map的key就在這裡設置;
  • listValue如果在Action里定義的是一個List,則往往會在List里定義一個Bean,它只有兩個屬性,另外一個(比如name)就在這裡設置
    • 如果在Action里定義的是一個Map,則Map的value就在這裡設置;
  • value用於回顯畫面上被選中的覆選框,假如畫面有輸入檢查,如果有錯則返回原畫面並顯示出錯信息,這時候就需要使用它。
    • 一般把它設成和name一致就可以了。

例子:

查詢了所有的角色,得到用戶與角色的所有id了。把封裝到數組中。


    public String editUI() {

        //把所有的角色查詢出來,帶過去給JSP頁面顯示
        ActionContext.getContext().getContextMap().put("roleList", roleServiceImpl.findObjects());

        //外邊已經傳了id過來了,我們要找到id對應的User
        if (user != null &&user.getId() != null  ) {
            //直接獲取出來,後面JSP會根據User有getter就能讀取對應的信息!
            user = userServiceImpl.findObjectById(user.getId());

            //通過用戶的id得到所擁有UserRole
            List<UserRole> roles = userServiceImpl.findRoleById(user.getId());
            //把用戶擁有角色的id填充到數組中,數組最後回顯到JSP頁面
            int i=0;
            userRoleIds =  new String[roles.size()];
            for (UserRole role : roles) {
                userRoleIds[i++] = role.getUserRoleId().getRole().getRoleId();
            }

        }
        return "editUI";
    }

name值的是數組,可以用於自動回顯。Action得到角色的id也是通過它


  <s:checkboxlist list="#roleList" name="userRoleIds" listKey="roleId" listValue="name"></s:checkboxlist>

資源國際化

我們在學JSTL標簽的時候就涉及到了資源國際化,,,但是呢,在JSP的章節我並沒有寫博文來講解怎麼弄....一方面感覺JSP的資源國際化好麻煩,另一方面是感覺用的地方很少.....因此就沒有深入去瞭解它...

今天呢,學習到了Struts2的資源國際化了。重新看回JSP資源國際化的步驟,再對比一下Struts的資源國際化

Servlet和Struts資源國際化區別

在Servlet寫資源國際化的步驟:

  • 寫資源文件
    • 基礎名.properties【預設】
    • 基礎名_語言簡稱_ 國家簡稱.properties
  • 讀取配置文件
    • jstl提供的格式化與國際化標簽庫。

在Struts2寫資源國際化的步驟:

  • 寫資源文件
    • 基礎名.properties【預設】
    • 基礎名_語言簡稱_ 國家簡稱.properties
  • 讀取配置文件再使用
    • struts標簽獲取資源文件內容

區別:

Struts2載入資源文件更加簡單,通過常量配置即可!提供的Struts標簽更簡單使用


資源國際化Demo

下麵就使用Struts來寫一個資源國際化的Demo....

寫資源文件

值得註意的是:在IDEA下寫properties資源文件,如果涉及到中文,預設是不會幫我們編碼的。它是不像eclipse的...因此需要我們手動去設置的......設置的教程在我的IDEA博文中有...如果出現了這個問題,那就去IDEA博文下找唄。。。

這裡寫圖片描述

在Struts中使用常量載入資源文件

我們直接在Struts中使用contant節點來載入我們自己寫的配置文件。值得註意的是:value的值是文件的全名(也就是說,如果有包,就把包名寫上)....並且,不需要寫上尾碼...

 <constant name="struts.custom.i18n.resources" value="msg"></constant>

這裡寫圖片描述


Struts標簽使用國際化

name的值是配置文件中配置的信息,寫上就行了!


<head>
    <title><s:text name="title"></s:text></title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
</head>

<body>
<form method="post" action="${pageContext.request.contextPath }/user_login.action">
    <s:text name="username"></s:text> <input name="admin.userName"><br/>
    <s:text name="psd"></s:text><input type="text" name="admin.pwd"><br/>
    <input type="submit" value="登陸"><br/>
</form>
</body>

測試

註意,title已經替換成了中文了!!

這裡寫圖片描述

如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章,想要獲取更多的Java資源的同學,可以關註微信公眾號:Java3y


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

-Advertisement-
Play Games
更多相關文章
  • 在之前一篇使用nginx搭建高可用的解決方案的時候,很多同學會問,如果nginx掛掉怎麼辦,比如下麵這張圖: 你可以清楚的看到,如果192.168.2.100這台機器掛掉了,那麼整個集群就下線了,這個問題該怎麼解決呢??? 簡單的想想確實不大好處理,因為你 的webBrowser總得要訪問一個ip地 ...
  • 一、安裝和部署 1、服務端安裝 1、官網下載(官方網站 https://www.mongodb.org/downloads/#production),傻瓜式安裝,註意修改安裝路徑。 安裝完成後的目錄結構: bin中,mongo.exe 為客戶端,mongod.exe 為資料庫: 2、配置環境變數 2 ...
  • 基準時間限制:3 秒 空間限制:131072 KB 分值: 320 難度:7級演算法題 收藏 關註 基準時間限制:3 秒 空間限制:131072 KB 分值: 320 難度:7級演算法題 基準時間限制:3 秒 空間限制:131072 KB 分值: 320 難度:7級演算法題 收藏 關註 收藏 關註 莫比烏 ...
  • ...
  • 這是閱讀《Java編髮編程實戰》這本Java多線程領域的寶典書籍的自我總結與融匯貫通的過程。現在看到了第二部分的第七章,我自己先在我們幾個人中,做一個開頭,把自己學習到的分享出來。現在只是多線程原子性總結了出來,今天陸續吧可見性和不變性都總結出來,貼上來。這些學習,都算是基礎夯實的過程,再多的框架,... ...
  • 一、基礎 1、編碼 UTF-8:中文占3個位元組 GBK:中文占2個位元組 Unicode、UTF-8、GBK三者關係 2、input()函數 輸入數字10,這裡的n是字元串'10',而非數字10 這裡如果 n * 10將輸出 '10101010101010101010'如果將字元串轉換數字,可以用In ...
  • 背景:機器上裝有jdk7和8兩個版本,命令行中查看java版本為1.7,而neon對jdk的版本要求是1.8,又不想修改系統預設的jdk版本。 解決方法:eclipse安裝目錄下找到eclipse.ini文件,增加如下參數: -vmD:\java\jdk1.8\bin 完整文件: ...
  • Python Python2 中除法的問題 Python2 中是除法 取整數部分 ,因而得到3/6 =0,5/2=2 可引用 from __future__ import division 模塊解決 Python 中 餘數 餘數的兩種方式 1、 % 2、divmod() ,得到商和餘數 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...