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

一、UI標籤

參考:https://mp.weixin.qq.com/s/PL0jg_o22SMOg3ShfiM1PA

1.1 含義

含義:顯示頁面的標籤。
目的:簡化代碼。
注意:
1、Struts2是服務端的框架。若使用Struts2標籤,則需要在服務器端解析,然後再被瀏覽器解析,最後才顯示在頁面上的。因此,Struts2標籤性能不如HTML標籤(可以直接被瀏覽器解析)。
2、通常情況下,頁面需要div+css佈局,Struts2標籤無法實現。因此,慎用Struts2標籤。

1.2 使用

1.2.1 默認主題

<%-- 我們發現,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標籤爲我們自動加入了很多的標籤。

1.2.2 設置主題

目的:不想使用Struts2默認主題。

<s:form id="form1" name="form1" method="POST" action="#" theme="simple">
    <%--輸入框數據,lable就相當於我們以前外邊寫的數據--%>
    <s:textfield label="用戶名" name="user.username"/>
    <%--密碼框--%>
    <s:password label="密碼" name="user.password"/>
    <%--提交按鈕--%>
    <s:submit value="提交"/>
</s:form>

想整個項目都是使用simple爲主題的話,可以在配置文件中配置!

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

二、數據回顯

Struts2中,使用數據回顯必須要使用Struts2的標籤。
在這裏插入圖片描述

2.1 按照正常思路寫數據回顯

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

public String login() {
	//把數據存儲到域中
	Map<String, Object> request = ActionContext.getContext().getContextMap();
	request.put("username", "zhongfucheng");
	request.put("password", "123");
	return SUCCESS;
}

2、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>

2.2 Struts2提供的數據回顯

1、保存在根元素的數據不用使用#號就可以獲取。
2、回顯的數據在根元素下(也就是保存在CompoundRoot中的數據),Struts2可以直接在name中就可以實現數據回顯了。
根元素數據:直接放在值棧的數據。

//得到值棧對象
ValueStack valueStack = ActionContext.getContext().getValueStack();
valueStack.set("username","張三");

在JSP就可以直接獲取了。

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

2.3 checkboxlist標籤

語法:

<s:checkboxlist name="" list="" listKey="" listValue="" value="" />
<!--
name:定義標籤名,用於接收畫面上選中的複選框。故應與Action裏定義的屬性一致,且多爲數組。
list:定義集合變量,用於輸出複選框到畫面上。一般在Action裏定義一個List或Map屬性。
listKey:若在Action裏定義的是一個,
——1、List,則往往會在List裏定義一個Bean,它只有兩個屬性,其中一個(比如id)就在這裏設置;
——2、Map,則Map的key就在這裏設置;
listValue:若在Action裏定義的是一個,
——1、List,則往往會在List裏定義一個Bean,它只有兩個屬性,其中一個(比如name)就在這裏設置;
——2、Map,則Map的Value就在這裏設置;
value:用於回顯畫面上被選中的複選框。
——當畫面有輸入檢查時,若有錯則返回原畫面並顯示出錯信息,這時候就需要使用它。一般把它設成和name一致就可以了
 -->

權限管理:用戶——角色——功能
查詢了所有的角色,得到用戶與角色的所有id了。把封裝到數組中。

public String editUI() {
	// =================把所有的角色查詢出來,帶過去給JSP頁面顯示==============
	ActionContext.getContext().getContextMap().put("roleList", roleServiceImpl.findObjects()); 
	// =================根據用戶id,查詢、封裝所屬的所有角色。==============
	 if (user != null && user.getId() != null  ) {		
		user = userServiceImpl.findObjectById(user.getId()); //直接獲取出來,後面JSP會根據User有getter就能讀取對應的信息!
		List<UserRole> roles = userServiceImpl.findRoleById(user.getId()); //通過用戶的id得到所擁有UserRole
		//把用戶擁有角色的id填充到數組中,數組最後回顯到JSP頁面	
		userRoleIds =  new String[roles.size()];
		for (int i = 0; i < roles.size(); i++) {
			userRoleIds[i] = roles[i].getUserRoleId().getRole().getRoleId();
		}
	}
	return "editUI";
}

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

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

三、資源國際化

3.1 Servlet和Struts資源國際化區別

Servlet:
1、寫資源文件
——基礎名.properties【默認】
——基礎名語言簡稱 國家簡稱.properties
2、讀取配置文件
——jstl提供的格式化與國際化標籤庫。
Struts2:
1、寫資源文件
——基礎名.properties【默認】
——基礎名語言簡稱 國家簡稱.properties
2、讀取配置文件再使用
——struts標籤獲取資源文件內容。
區別:Struts2加載資源文件更加簡單,通過常量配置即可!提供的Struts標籤更簡單使用

3.2 Struts實現資源國際化

3.2.1 寫資源文件

msg.properties

密碼

msg_en_US.properties(英語/美語)

Password

3.2.2 使用常量加載資源文件

<constant name="struts.custom.i18n.resources" value="msg" />
<!--
1、value="文件的全名"。
2、文件的全名:有包,就把包名寫上。
3、不需要寫上後綴。
 -->

3.2.3 Struts標籤使用國際化

<head>
    <title><s:text name="title"/></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"/> <input name="admin.userName"><br/>
    <s:text name="psd"/> <input type="text" name="admin.pwd"><br/>
    <input type="submit" value="登陸"><br/>
</form>
</body>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章