第一个页面整合
到目前为止,框架从Action到后台数据库流程都通了,是时候让页面来展示一下的时候了,先搞个最简单的页面,登录页面好了
action的配置在第一节中已经做过了,超接简单,LoginAction中的userInfo变量负责从前台收集用户输入的用户名和密码,然后调用Service层接口判断用户密码是否匹配,如果登录成功,将当前用户信息保存到session中,如果登录失败,给出失败提示信息,并在登录页面上提示出来,
这里要处理一下几个核心要素
1.前台页面参数收集
因为后台Action负责接受前台参数是一个userInfo对象,因此,对应的用户名和密码的name分别设置为userInfo.name和userInfo.password,这样在表单post到后台后struts2拦截器会自动把这些值解析,通过反射机制调用userInfo.setName()和userInfo.setPassword()方法注入值,注意,后台LoginAction类中的UserInfo对象一定要写setter和getter方法,否则值是无法自动装配上的
2.出错信息显示
正常的情况下用户输入正确的用户名和密码系统就登录进去了,那如果如有错误该如何展示给用户呢,Struts2提供了几个粒度的错误提示信息actionError--表示一条或多条的出错信息,actionMessage--表示普通信息提示,也可以表是一条或多条,fieldError字段级别的错误,这里我们用 的是actionError,action代码如下图
然后在前台中利用struts2的标签<s:actionError/>将错误显示出来
问题:为什么错误提示那么奇怪,错误提示里那个小黑点是怎么搞出来的,怎么去除呢
这个是struts2的标签带来的,看一下源码就知道了,我们的错误提示最终解析成的html为<ul><li><span class="errorMessage">密码错误!</span></li></ul>,所以出现那个奇怪的东西
<#if (actionErrors?exists && actionErrors?size > 0)>
<ul>
<#list actionErrors as error>
<li><span<#rt/>
<#if parameters.cssClass?exists>
class="${parameters.cssClass?html}"<#rt/>
<#else>
class="errorMessage"<#rt/>
</#if>
<#if parameters.cssStyle?exists>
style="${parameters.cssStyle?html}"<#rt/>
</#if>
>${error}</span></li>
</#list>
</ul>
</#if>
怎么去除呢?重写一下这个标签及可以了,在src/main/resources下新建template/simple文件夹然后新建一个actionerror.ftl,内容如下
注意,我们在struts.xml里要修改下struts样式的加载路径<constant name="struts.ui.theme" value="simple" />这是因为struts2默认是用xhtml来生成标签的,用这个样式的标签有个很大的缺点就是struts会自动在生成的标签外层套用一些td,tr,table,或span之类的东西,如<s:label value="文本"/>解析后的html是<td>文本</td>,这样额外加上这些元素后我们原有的页面样式会被搞乱掉了,所以切到simple主题下,这个主题下的标签不会添加额外的元素,但也有小部分还是需要单独处理下的
<#if (actionErrors?exists && actionErrors?size > 0)>
<#if (actionErrors?size > 1)>
<div class="box box-error-msg">
<ol>
<#list actionErrors as error>
<li>${error}</li>
</#list>
</ol>
</div>
<#else>
<div class="box box-error">${actionErrors[0]}</div>
</#if>
</#if>
这个是我们自己定义的样式,因为一旦系统的演示定下来后这些报错信息都是统一的,所以都写在里面了,页面上调用<s:actionerror />标签时不需要再去判断是否有<s:if test=“hasActonErrors()"/>去判断了,因为这些逻辑都在这个被重写过的标签里了,这个标签支持两种样式的报错,一种是单行报错,另一种是多行报错信息,分别会调用不同的样式来处理,至此,一个登录页面就大功告成了,最终的界面展示
经验与总结:
Struts2的默认主题样式直接用会让人晕掉的,那么多额外毛出来的标签把原本漂亮的页面搞的一塌糊涂,先前用的时候不知道是因为这个xhtml和simple样式的问题导致的,所以以前处理这些问题很被动,作出的页面也很撮,看来用一个框架或工具必须是要深入了解其内部细节的,呵呵,第一个页面出来了,下一个还会远吗?
分享到:
相关推荐
因为第Spring_2501_Registration_3到Spring_3301_Registration_11需要使用SSh整合的jar包组合,我把这个jar包组合抽出来放到lib目录中了。用的时候需要把这个jar包组合复制到WebRoot\WEB-INF\lib下面。没办法,这里...
专题研究:重温“信贷脉冲”-0217-浙商证券-11页.pdf
**微信小程序项目源码-校友林微信小程序+SSM框架+论文.rar 功能介绍** 校友林微信小程序是一个专为高校打造的互动交流平台,旨在促进校友间的联系与回忆。结合SSM框架(Spring、SpringMVC、MyBatis)的强大后端支持...
经典重温C#开发------------------------------------------------------------------------------------------------------------------------------------------------
学习心得 感谢以下文章及老师的指导: 【【已完结 共69P】通信原理 主讲:张锦皓-哔哩哔哩】 ...本文不作为一篇严谨的理论推导文章,仅为博主学习时的随手小记,个人的主观认知为主,以求日后能在较快时间内理清思路,...
重温微积分 - 齐民友
重温计算机的发展史-多图展示历史上各种各样的电脑.pdf
齐民优经典微积分教程,打开新世界的大门!!相对于枯燥无味的高数教材,这本书能带来不一样的启发和更为深入地理解
八年级历史上册 第11课 重温长征路教案 华东师大版-华东师大版初中八年级上册历史教案.doc
在 C#中的委托和事件 一文的后半部分,我向大家讲述了Observer(观察者)模式,并使用委托和事件实现了这个模式。实际上,不使用委托和事件,一样可以实现Observer模式。在本文中,我将使用GOF的经典方式,再次实现一...
本项目适用于喜欢超级玛丽游戏的人,对于喜欢超级玛丽游戏的人来说,这是一个很好的重温经典的机会;对于学习前端开发的人,这个项目可以作为学习前端开发的实践项目,通过这个项目可以锻炼HTML、CSS和JavaScript等...
---Day01SpringBoot基础重温篇.mp4 ---Day02SpringBoot核心原理篇.mp4 ---Day03SpringBoot完美收官篇.mp4 优秀作业名单 ---Day01优秀作业名单(排名不分先后).txt ---Day02优秀作业名单(排名不分先后).txt 源码和软件...
20190407-国泰君安-通信设备及服务行业:重温传统视频会议的三生三世,揭示云视频行业的十里桃花.pdf
NULL 博文链接:https://i8i8i8.iteye.com/blog/445946
恐龙来袭-重温侏罗纪.ppt
PPT模板-重温春夏秋冬(动态.dpt
重温微积分前四章重排版齐民友.pdf
本文不作为一篇严谨的理论推导文章,仅为博主学习时的随手小记,个人的主观认知为主,以求日后能在较快时间内理清思路,找到当下的学习状态。文章中会尽量避免出现过多公式及推导,如果能有幸给其他朋友带来一些帮助...
陈硕 Google分布式系统专家 课程简介 本课程从网络编程的基本原理入手,基于Linux系统平台...希望系统掌握或重温网络编程相关知识,快速应用于实践的架构师、开发者,以及其他从事网络开发、运维、测试的 IT 从业者。