重温经典struts1之ActionMessage(s)类结合html标签完成页面显示异常消息和正常提示消息
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
今天我们来学习,怎样在页面显示,java端抛出的异常消息或正常处理完了时的提示消息
具体做法,就是我们今天的主题,ActionMessage(s)类结合< html;messages>或< html:errors>标签来完成
ActionMessage类
struts提供ActionMessage类,来保存单条异常信息和正常提示信息,
一个ActionMessage类的实例,对应消息资源文件中的一条消息
通过下边的代码实例化ActionMessage类
ActionMessage message = new ActionMessage(“login.success”, username);
可以看出,ActionMessage类的构造函数接收两个参数
- 消息资源文件中的key
- key对应的消息内容中占位符({0},{1}等)替换的值
ActionMessages类(集合类)
ActionMessages类是ActionMessage类的集合类,
在action中将单条的消息设定到ActionMessages类实例后,add到ActionMessages类中
最终set到request中,返回给页面
常用方法有以下两种
- saveMessages(request, messages);
向request中设置正常提示消息集合 - saveErrors(request, messages);
向request中设置错误消息集合
ActionMessage(s)的具体用法,参看下边action的代码示例
< html:messages> 标签
该标签,对应request中的ActionMessages类(集合类)的实例
遍历ActionMessages类实例,通过< bean:write>标签逐一输出ActionMessage
通过属性message=true或false来控制,读取正常提示消息或异常消息
- message=true:读取正常提示消息
代码如下
<html:messages id=“message” message=“true”>
< font color=“red”><bean:write name=“message”/>
</html:messages>
- message=false:读取异常消息,默认是false
代码如下
<html:messages id=“message” >
< font color=“red”><bean:write name=“message”/>
</html:messages>
< html:error> 标签
通过标签名,可以看出该标签只能取出错误消息
使用方法很简单,只需一行代码,就可取到request中设置的错误消息
< html:errors/>
需求
如下图所示,
写一个login页面
当用户名和密码不等于admin时,
login页面上列表红字显示错误信息:用户名和密码错误
当用户名和密码都是admin时,跳转到登陆成功页面
-
登陆错误
-
登陆成功
具体实现步骤
- 在国际化资源文件中添加消息内容及输出样式
?MessageResources_en_US.properties
?MessageResources_zh_CN.properties
?MessageResources.properties
国际化(i18n)内容可参看我上一篇文章
https://blog.csdn.net/dy051107/article/details/135070989
MessageResources_en_US.properties内容如下:
errors.header=<UL>
errors.prefix=<font color="red"><LI>
errors.suffix=</LI></font>
errors.footer=</UL>
login.form.filed.username=User name
login.form.filed.password=Password
login.form.button.login=Login
login.success={0},Login Success
login.error=login.error
MessageResources_zh_CN.properties内容如下:
errors.header=<UL>
errors.prefix=<font color="red"><LI>
errors.suffix=</LI></font>
errors.footer=</UL>
login.form.filed.username=用户名
login.form.filed.password=密码
login.form.button.login=登录
login.success={0},登陆成功
login.error=用户名或密码错误
MessageResources.properties内容如下:
errors.header=<UL>
errors.prefix=<font color="red"><LI>
errors.suffix=</LI></font>
errors.footer=</UL>
login.form.filed.username=User name
login.form.filed.password=Password
login.form.button.login=Login
login.success={0},Login Success
login.error=login.error
重点:属性文件中以errors.开头的是struts为我们提供的错误信息的样式,
例如列表显示< UL>< LI>< /LI>< /UL>
红色字体显示< font color=“red”>< /font>
可以按照自己项目需求,自行修改
- 自定义LoginException异常类
Service层验证用户名和密码不正时,向action抛出的异常类
继承RuntimeException类,重写父类的构造方法
LoginException代码如下:
public class LoginException extends RuntimeException {
public LoginException() {
}
public LoginException(String message) {
super(message);
}
public LoginException(Throwable cause) {
super(cause);
}
public LoginException(String message, Throwable cause) {
super(message, cause);
}
public LoginException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
- Service层验证用户名和密码
编写一个UserService类,接收action传来的参数(用户名和密码),
按需求验证用户名和密码有任何一个不等于admin时,向action抛出LoginException异常类
UserService代码如下:
import xxx.xxx.exception.LoginException;
public class UserService {
public void login(String username, String password) {
if (!"admin".equals(username) || !"admin".equals(password)) {
throw new LoginException();
}
}
}
- Action类中调用Service验证用户名和密码以及处理异常(LoginException)
在Action类中,使用try…catch代码块,调用service层,并拦截其LoginException异常,
验证用户名和密码不正确时
?实例化ActionMessage类(设置错误消息key,消息内容有占位符替换)
?并add到ActionMessages类中,
?通过saveErrors(request, messages);方法,将ActionMessages类set到request中
?回login页面,显示错误消息
验证用户名和密码通过时
?实例化ActionMessage类(设置正常提示消息key,消息内容有占位符替换)
?并add到ActionMessages类中,
?通过saveMessages(request, messages);方法,将ActionMessages类set到request中
?回login成功页面,显示正常提示消息
LoginAction代码如下:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import xxx.xxx.exception.LoginException;
import xxx.xxx.form.LoginForm;
import xxx.xxx.service.UserService;
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
LoginForm lf = (LoginForm) form;
String username = lf.getUsername();
String password = lf.getPassword();
UserService userService = new UserService();
ActionMessages messages = new ActionMessages();
try {
userService.login(username, password);
ActionMessage message = new ActionMessage("login.success", username);
messages.add("login.success", message);
this.saveMessages(request, messages);
return mapping.findForward("success");
} catch (LoginException e) {
ActionMessage error = new ActionMessage("login.error");
messages.add("login.error", error);
}
this.saveErrors(request, messages);
return mapping.getInputForward();
}
}
- 通过< html;messages>或< html:errors>进行页面消息显示
前面我们讲过,读取错误信息有两种方式,
因为,错误消息样式已经在国际化资源文件中设定过,而且一行代码就能搞定
这里推荐使用< html:errors>
login.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%-- <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> --%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<html:errors/>
<form action="login.do" method="post">
<bean:message key="login.form.filed.username"/>:<input type="text" name ="username"><br>
<bean:message key="login.form.filed.password"/>: <input type="password" name ="password"><br>
<input type="submit" value="<bean:message key="login.form.button.login"/>">
</form>
</body>
</html>
登陆成功后,跳转到login成功页面
获取正常提示消息使用< html:messages> 标签
login_success.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<html:messages id="message" message="true">
<bean:write name="message"/>
</html:messages>
</body>
</html>
其他的代码(action,formbean等),可以参看<重温经典struts1之xxx>系列的文章
总结
到这里我们就完成了ActionMessage(s)类结合html标签完成页面显示异常消息和正常提示消息,运行效果在文章开头需求中的图可以看到,欢迎留言交流,下篇见。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!