提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
今天我们来学习,怎样在页面显示,java端抛出的异常消息或正常处理完了时的提示消息
具体做法,就是我们今天的主题,ActionMessage(s)类结合< html;messages>或< html:errors>标签来完成
struts提供ActionMessage类,来保存单条异常信息和正常提示信息,
一个ActionMessage类的实例,对应消息资源文件中的一条消息
通过下边的代码实例化ActionMessage类
ActionMessage message = new ActionMessage(“login.success”, username);
可以看出,ActionMessage类的构造函数接收两个参数
ActionMessages类是ActionMessage类的集合类,
在action中将单条的消息设定到ActionMessages类实例后,add到ActionMessages类中
最终set到request中,返回给页面
常用方法有以下两种
ActionMessage(s)的具体用法,参看下边action的代码示例
该标签,对应request中的ActionMessages类(集合类)的实例
遍历ActionMessages类实例,通过< bean:write>标签逐一输出ActionMessage
通过属性message=true或false来控制,读取正常提示消息或异常消息
<html:messages id=“message” message=“true”>
< font color=“red”><bean:write name=“message”/>
</html:messages>
<html:messages id=“message” >
< font color=“red”><bean:write name=“message”/>
</html:messages>
通过标签名,可以看出该标签只能取出错误消息
使用方法很简单,只需一行代码,就可取到request中设置的错误消息
< html:errors/>
如下图所示,
写一个login页面
当用户名和密码不等于admin时,
login页面上列表红字显示错误信息:用户名和密码错误
当用户名和密码都是admin时,跳转到登陆成功页面
登陆错误
登陆成功
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代码如下:
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);
}
}
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();
}
}
}
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();
}
}
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标签完成页面显示异常消息和正常提示消息,运行效果在文章开头需求中的图可以看到,欢迎留言交流,下篇见。