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

2023-12-26 13:03:45

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

今天我们来学习,怎样在页面显示,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>
可以按照自己项目需求,自行修改

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

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

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

文章来源:https://blog.csdn.net/dy051107/article/details/135166904
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。