文章目录
一、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>