Struts2【UI标签、数据回显、资源国际化】
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
Struts2【UI标签、数据回显、资源国际化】的更多相关文章
- Struts2实现input数据回显
/** 修改页面 */ public String editUI() { //准备回显得数据 Role role = roleService.getById(id); ...
- form:select form:options 标签数据回显
在jsp页面中经常会使用到 form:select form:options 遍历后台List集合生成 select 下拉选择器,但是 form:options 标签并没有提供一个可以回显数据的属性. ...
- c:if标签数据回显判断是否选中
<form action="/brand/list.do" method="post" style="padding-top:5px;" ...
- Struts2第十一篇【简单UI标签、数据回显】
Struts2UI标签 Sturts2为了简化我们的开发,也为我们提供了UI标签-也就是显示页面的标签-.. 但是呢,Struts2是服务端的框架,因此使用页面的标签是需要在服务器端解析然后再被浏览器 ...
- 二十 Struts2的标签库,数据回显(基于值栈)
通用标签库 判断标签:<s:if>.<s:elseif>.<s:else> 循环标签:<s:iterator> 其他常用标签: <s:proper ...
- 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】
一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...
- struts2 UI标签 和 主题
四.Struts2的UI标签和主题 1.Struts2中UI标签的优势 自动的数据回显和错误提示功能 自带的简单样式和排版 2.表单标签的通用属性 说明:UI标签中value的取值一般都是字符串. 2 ...
- 一脸懵逼学习Struts数据校验以及数据回显,模型驱动,防止表单重复提交的应用。
1:Struts2表单数据校验: (1)前台校验,也称之为客户端校验,主要是通过Javascript编程的方式进行数据的验证. (2)后台校验,也称之为服务器校验,这里指的是使用Struts2通过xm ...
- SpringMVC【参数绑定、数据回显、文件上传】
前言 本文主要讲解的知识点如下: 参数绑定 数据回显 文件上传 参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Controller中处理,这个过程就叫做参数绑定.. ...
随机推荐
- Cause: java. lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseInsertProvider
相信现在Java Web开发都是用的mybatis吧,而用到mybatis很多人都不会错过通用mapper吧! (纯属瞎扯淡...qwq). 如我上一篇博客所写,目前公司新项目,使用了通用mapper ...
- centos7系统下配置jdk环境变量
用到的工具, Xshell5, Xftp5 现在的jdk7下载链接不好找, 打开下载界面, 全是jdk8的, 我这里提供了一份百度云的下载地址http://pan.baidu.com/s/1jHF9m ...
- zipkin
转:https://blog.csdn.net/liaokailin/article/details/52077620 zipkin为分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监 ...
- node.js 递归复制文件夹(附带文件过滤功能)
1.简介: 很简单,写了一个node操作文件的小脚本,主要实现对目标文件夹中内容的复制.还顺带一个按照文件夹或者文件名过滤的功能. 2.应用场景 适合基于 node 环境的项目,项目打包的时候,配合 ...
- oracle中文乱码问题解决
中文乱码问题解决:1.查看服务器端编码select userenv('language') from dual;我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK2.执行语句 se ...
- String类,StringBuffer类转字符数组
String不可变类型和StringBuffer可变类型 String类和StringBuffer类都是字符串表示类,区别在于String对象引用变量是不可变的,而StringBuffer类对象引用变 ...
- Pycharm画五角星
import turtle turtle.setup(600,400,0,0) turtle.bgcolor('red') turtle.color('yellow') turtle.fillcolo ...
- 【分享】【原创开源应用第4期】给ili9488,RA8875类显示屏的emWin底层增加DMA加速方案
说明:1.emWin底层中最重要的一个优化就是16bpp绘制,特此为其增加DMA加速,已经支持RA8875和ili9488.2.使用中务必将emWin任务设置为除了空闲任务,统计任务以外的最低优先级, ...
- Java synchronized和 Lock 的区别与用法
在分布式开发中,锁是线程控制的重要途径.Java为此也提供了2种锁机制,synchronized和lock.做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方. ...
- Saiku设置展示table数据不隐藏空的行数据信息(二十六)
Saiku设置展示table数据不隐藏空的行数据信息 saiku有个 非空的字段 按钮,点击这个后,会自动的把空的行数据信息给隐藏掉,这里我们来设置一下让其行数据不隐藏,为空的就为空. 主要更改两个文 ...