注意地址栏:未提交页面时,是login.jsp:
提交页面后,是Login.action:
在Struts.xml文件中有:
<action name="Login"
class="com.example.struts.action.LoginAction">
<result name="input">/jsp/login.jsp</result>
<result name="success">/jsp/success.jsp</result>
</action>
即,地址栏中Login.action是Action类对应的映射名。
提交的表单中的数据经由Action类处理后跳转到结果页面,地址栏中仍为Action类映射名。
下面我们再来看一个例子:
ErrorAndMessage.jsp:
<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<s:head />
</head>
<body>
<s:actionerror />
<p>
<s:actionmessage />
</body>
</html>
ErrorAndMessageAction.java:
package com.example.struts.action;
import com.opensymphony.xwork2.ActionSupport;
public class ErrorAndMessageAction extends ActionSupport{
public String execute() throws Exception{
addActionError("Action 的错误信息");
addActionMessage("Action 的消息信息");
return SUCCESS;
}
}
struts.xml:
<action name="ErrorAndMessage"
class="com.example.struts.action.ErrorAndMessageAction">
<result name="success">/jsp/ErrorAndMessage.jsp</result>
</action>
若在地址栏输入:http://localhost:8080/Tg/jsp/ErrorAndMessage.jsp 则什么都不输出。
若在地址栏输入:http://localhost:8080/Tg/jsp/ErrorAndMessage.action 则输出如下:
原因:之前是直接运行.jsp页面,这样标签<s:actionerror />和<s:actionmessage /> 就什么值都没有;
之后是直接运行.action,这样就通过addActionError和addActionMessage方法初始化了error和message,
接着由struts.xml导航到JSP页面,这时标签<s:actionerror />和<s:actionmessage /> 就有值可取了。
注:直接运行.jsp页面之所以不经过struts.xml导航,是因为它没有经过<form>表单"提交"操作。