Struts2 Action参数详细说明
1,Action的配置格式基本为:
<package name="包名字" extends="继承的包" namespace="空间名" >
<action name="访问的名称" class="处理请求的类">
<result name="处理类返回的结果名称">该结果名称所对应的JSP页面</result>
</action>
</package>
如:
<package name="aa" extends="struts-default" >
<action name="myaa" class="st.MyAction">
<result name="success">/test/msg.jsp</result>
</action>
</package>
访问时:
<a href="myaa.action" >访问myaaAction</a>
<package name="包名字" extends="继承的包" namespace="空间名" >
<action name="访问的名称" class="处理请求的类">
<result name="处理类返回的结果名称">该结果名称所对应的JSP页面</result>
</action>
</package>
如:
<package name="aa" extends="struts-default" >
<action name="myaa" class="st.MyAction">
<result name="success">/test/msg.jsp</result>
</action>
</package>
访问时:
<a href="myaa.action" >访问myaaAction</a>
2,method属性,该属性可以把一个类的多个方法映射为多个Action,如:
类文件
public class MethodAction extends ActionSupport
{
public String add()
{
return SUCCESS;
}
public String delete()
{
return SUCCESS;
}
public String modify()
{
return SUCCESS;
类文件
public class MethodAction extends ActionSupport
{
public String add()
{
return SUCCESS;
}
public String delete()
{
return SUCCESS;
}
public String modify()
{
return SUCCESS;
}
public String query()
{
return SUCCESS;
}
}
l配置文件:
<action name="访问的方法名" class="处理的类" method="处理的方法名">
<result name="结果页名">结果页面</result>
</action>
<action name="add" class="com.struts2.chen.MethodAction" method="add">
<result name="success">/method/addRes.jsp</result>
</action>
public String query()
{
return SUCCESS;
}
}
l配置文件:
<action name="访问的方法名" class="处理的类" method="处理的方法名">
<result name="结果页名">结果页面</result>
</action>
<action name="add" class="com.struts2.chen.MethodAction" method="add">
<result name="success">/method/addRes.jsp</result>
</action>
<action name="delete" class="com.struts2.chen.MethodAction" method="delete">
<result name="success">/method/deleteRes.jsp</result>
</action>
<action name="modify" class="com.struts2.chen.MethodAction" method="modify">
<result name="success">/method/modifyRes.jsp</result>
</action>
<action name="query" class="com.struts2.chen.MethodAction" method="query">
<result name="success">/method/queryRes.jsp</result>
</action>
页面:
<a href="add.action">增加</a><br />
<a href="delete.action">删除</a><br />
<a href="modify.action">修改</a><br />
<a href="query.action">查询</a><br />
<result name="success">/method/deleteRes.jsp</result>
</action>
<action name="modify" class="com.struts2.chen.MethodAction" method="modify">
<result name="success">/method/modifyRes.jsp</result>
</action>
<action name="query" class="com.struts2.chen.MethodAction" method="query">
<result name="success">/method/queryRes.jsp</result>
</action>
页面:
<a href="add.action">增加</a><br />
<a href="delete.action">删除</a><br />
<a href="modify.action">修改</a><br />
<a href="query.action">查询</a><br />
3。动态调用方法DMI 如果是动态调用,那么就不必要象上面那样填写那么多的配置,可以
直接在页面上指定调用的方法。如下:
1)类与以上配置一样
2)l配置为:
<action name="methodaction" class="com.struts2.chen.MethodAction">
<result name="success">/method/Res.jsp</result>
</action>
3)页面:
<a href="<%=path %>/methodaction!add.action">增加DMI</a><br />
<a href="<%=path %>/methodaction!delete.action">删除DMI</a><br />
<a href="<%=path %>/methodaction!modify.action">修改DMI</a><br />
<a href="<%=path %>/methodaction!query.action">查询DMI</a><br />
1)类与以上配置一样
2)l配置为:
<action name="methodaction" class="com.struts2.chen.MethodAction">
<result name="success">/method/Res.jsp</result>
</action>
3)页面:
<a href="<%=path %>/methodaction!add.action">增加DMI</a><br />
<a href="<%=path %>/methodaction!delete.action">删除DMI</a><br />
<a href="<%=path %>/methodaction!modify.action">修改DMI</a><br />
<a href="<%=path %>/methodaction!query.action">查询DMI</a><br />
以上一般选择用2比较多,动态的调用方法调用的比较少,因为每个方法中可能调用的和过滤器可能不一样,所以,一般选用2。
4。forward跳转,如果在result中不加上 type="redirect" ,那么就是forward的服务器跳转,
加上后就是客户端的跳转 如:struts配置
<action name="index">
<result type="redirect">index.jsp</result>
</action>
在页面中调用的时候,这么写:
<a href="<%=path %>/index.action">返回首页</a>
<action name="index">
<result type="redirect">index.jsp</result>
</action>
在页面中调用的时候,这么写:
<a href="<%=path %>/index.action">返回首页</a>
5。错误提示,当访问不存在的action 的时候,会报错,那么就应该到l中加上一个默认错误ACTION。如:
<default-action-ref name="error" />
<action name="error">
getattribute方法返回类型 <result>/error.jsp</result>
</action>
错误的,不存在的页面,那么就在l中加如下配置:
<error-page>
<error-code>404</error-code>
<default-action-ref name="error" />
<action name="error">
getattribute方法返回类型 <result>/error.jsp</result>
</action>
错误的,不存在的页面,那么就在l中加如下配置:
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
可能页面错误哪个不到,那么就要到在IE【工具】->【Internet选项】->【高级】中勾掉【显示友好http错误提示】;
</error-page>
可能页面错误哪个不到,那么就要到在IE【工具】->【Internet选项】->【高级】中勾掉【显示友好http错误提示】;
----------------------------------------------------------------------------------------------------------------------
struts2中常用Result类型的用法
关键字: struts2
一、dispatcher
(1)为缺省的result类型,一般情况下我们在l会这么写:
<result name="success">/main.jsp</result>
以上写法使用了两个默认,其完整的写法为:
<result name="success" type="dispatcher">
<param name="location">/maini.jsp</param>
</result>
第一个默认:type="dispatcher";第二个默认:设置的为location参数,location只能是页面,不能是另一个action(可用type="chain"解决)。
(2)实现方式
从doExecute方法看出,有三个出口(finalLocation为要跳转的地址):
pageContext.include(finalLocation);
dispatcher.forward(request, response); (dispatcher是根据finalLocation创建的)
dispatcher.include(request, response);
而我们知道,forward与include都是转发到context内部的资源。
二、redirect
(1)可以重定向到一个页面,另一个action或一个网址。
<result name="success" type="redirect">aaa.jsp</result>
<result name="success" type="redirect">bbb.action</result>
<result name="success" type="redirect">www.baidu</result>
(2)实现方式:
查看doExecute方法,只有一个出口:
response.sendRedirect(finalLocation);
sendRedirect是重定向,是重新产生一个HTTP请求到服务器,故重定向后其原来所在的action上下文就不可用了。
三、chain
(1)主要用于把相关的几个action连接起来,共同完成一个功能。
<action name="step1" class="test.Step1Action">
<result name="success" type="chain">step2.action</result>
</action>
<action name="step2" class="test.Step2Action">
<result name="success">finish.jsp</result>
</action>
(2)实现方式:
查看execute()方法,主要思想如下:
// 根据Action名称finalActionName及要调用的方法finalMethodName来new一个代理对象proxy,并执行之
proxy = ateActionProxy(finalNamespace,
finalActionName, finalMethodName, extraContext);
ute();
(3)多个action间数据的传递
主要有两种方式:
1。由于处于chain中的action属于同一个http请求,共享一个ActionContext,故可以在上下文中获取,在页面上可以直接使用。手动获取的方法如下:
HttpServletRequest request = Request();
String s=(Attribute("propName");
2。实现ModelDriven接口
在Step1Action中,加入getModel:
public Object getModel() {
return message;
}
在Step2Action中,加入setModel:
public void setModel(Object o){
System.out.println("message is:"+o);
}
注意,setModel的调用先于execute()方法后于构造方法。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论