重温经典struts1之ActionMessage(s)类结合html标签完成页面显示异常消息和正常提示消息

前言

今天我们来学习,怎样在页面显示,java端抛出的异常消息或正常处理完了时的提示消息
具体做法,就是我们今天的主题,ActionMessage(s)类结合< html;messages>或< html:errors>标签来完成


ActionMessage类

struts提供ActionMessage类,来保存单条异常信息和正常提示信息,
一个ActionMessage类的实例,对应消息资源文件中的一条消息
通过下边的代码实例化ActionMessage类

ActionMessage message = new ActionMessage(“login.success”, username);

可以看出,ActionMessage类的构造函数接收两个参数

  1. 消息资源文件中的key
  2. key对应的消息内容中占位符({0},{1}等)替换的值

ActionMessages类(集合类)

ActionMessages类是ActionMessage类的集合类,
在action中将单条的消息设定到ActionMessages类实例后,add到ActionMessages类中
最终set到request中,返回给页面

常用方法有以下两种

  1. saveMessages(request, messages);
    向request中设置正常提示消息集合
  2. 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时,跳转到登陆成功页面

  • 登陆错误
    在这里插入图片描述
    在这里插入图片描述

  • 登陆成功
    在这里插入图片描述
    在这里插入图片描述

具体实现步骤

1. 在国际化资源文件中添加消息内容及输出样式

・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>
可以按照自己项目需求,自行修改

2. 自定义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);
	}

}

3. 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();
		}
	}

}

4. 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();
	}
}

5. 通过< 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标签完成页面显示异常消息和正常提示消息,运行效果在文章开头需求中的图可以看到,欢迎留言交流,下篇见。

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值