注意地址栏:未提交页面时,是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>表单"提交"操作。