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

Struts2UI標籤

Sturts2爲了簡化咱們的開發,也爲咱們提供了UI標籤...也就是顯示頁面的標籤.....css

可是呢,Struts2是服務端的框架,所以使用頁面的標籤是須要在服務器端解析而後再被瀏覽器解析,**最後才顯示在頁面上的。**所以,它的性能是不夠HTML標籤好的...HTML直接就可以被瀏覽器解析html

還有一點是:咱們在寫網頁的時候,確定是須要使用div+css的頁面佈局的使用Struts2UI標籤也無法幹了....所以,除了有必要的話,纔去使用Struts2UI標籤java

簡單使用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的標籤...eclipse

 

這裏寫圖片描述

 

按照正常思路寫數據回顯

在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

相關文章
相關標籤/搜索