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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值