您的位置:首页 > 编程语言 > Java开发

struts2注解

2014-07-08 23:00 387 查看
本文内容:

一.使用注解方式的好处


二.Java注解方式写法


三. Java注解具体实现 

四.Java注解的其他写法

一.使用注解方式的好处

Struts2中声明架构有2种方式,一种是xml的方式,一种Java注解的方式。对于Java注解的方式,它没有xml文件,所有的元数据都集中放在Java注解中,这些注解直接驻留在实现动作的类对应的Java源代码中。

很多人觉得Java注解是一种比较优雅的解决方案。有些XMl元素中必须显示指定的信息,可以从注解的类所隶属的Java包结构自动推断出来,也减少了多年以来在Web应用程序类路径下积累的XML文件的混乱状况。

(PS:个人觉得XML的也还好,大不了我把XML分割成几个独立的XML,必要时多写几行注释不就OK了)



二.Java注解方式写法

总结常用注解:

Namespace:指定命名空间。

ParentPackage:指定父包。

Result:提供Action结果的映射。

Results:Result注解列表。

Action:指定Action的访问URL。

Actions:Action注解列表。

@Namespace("/XXX")  //不需要指定也可以。

@ParentPackage("struts-default")  //不需要指定也可以。

@Result(name = "success",location = "/MyJsp.jsp")

@Results({ 

@Result(name = "success",location = "/MyJsp.jsp"),

@Result(name = "error",location = "/index.jsp")

})

@Action(value = "abc")

@Actions( { @Action("/one/url"), @Action("/another/url") })

一般来说,Action会配合Results属性一起使用。如:

@Action(value = "/H5/url", results = { 

@Result(name = SUCCESS, location = "/H5/success.jsp"),  

@Result(name = "failure", location = "/H5/fail.jsp") 

})

三. Java注解具体实现

1.需要告诉框架动作类在哪里。

所以需要在web.xml中的FilterDispatcher中配置actionPackages属性,如下:

<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>action</param-value>
</init-param>
</filter>

2.告诉框架动作类在哪里还是不够的,需要以某种方式标记哪些类是动作类。方法有2.

一.实现Action接口。

二.使用命名约定,即让类名以Action结尾。

当然,你即实现Action接口,也以Action结尾也是可以的。

3.具体实例:我建的Web工程如下:



Web.xml文件如下:

<filter>

<filter-name>struts2</filter-name>

<filter-class>

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

</filter-class>

<init-param>

<param-name>actionPackages</param-name>

<param-value>action</param-value>

</init-param>

</filter>

Index.jsp页面如下:

<body>

<a href = "/test/test.action">test1.action</a>
</body>
TestAction代码如下:

package com.my.action;

import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;

@Namespace("/test")  //不需要指定也可以。不指定时jsp页面的/test/的这个命名空间也要去掉
@ParentPackage("struts-default")  //不需要也可以

/*
* 相当于指定全局结果
*/
@Results({
@Result(name = "success",location = "/Success.jsp"),
@Result(name = "error",location = "/Error.jsp")
})

/*
* @Result(name = "error",location = "/index.jsp")
* 这个也是相当于指定全局结果,只不过这个是指定一个返回,上面是指定多个。
*/

public class TestAction extends ActionSupport{
public String execute() throws Exception
{
return SUCCESS;
}
}


四.Java注解的其他写法

1.假如多个action响应同一个函数怎么办?

2.一个TestAction类中有多个方法,分别响应不同的action。

3.正常点的类(一个TestAction类中有多个方法,分别响应不同的action。各自action有各 自的返回值)

 

对于1:

public class TestAction extends ActionSupport{

@Actions({
@Action("test"),
@Action("test1")
})
public String execute() throws Exception
{
return SUCCESS;
}
}
对于2:
public class TestAction extends ActionSupport{

/*
* 这个execute()方法默认就是test.action对应响应的方法
*/
public String execute() throws Exception
{
return SUCCESS;
}

@Action("test1")
public String test2()
{
return ERROR;
}
}
对于3:

public class TestAction extends ActionSupport{

/*
* 这个execute()方法默认就是test.action对应响应的方法
*/
public String execute() throws Exception
{
return SUCCESS;
}

/*
* 不同action响应同一个方法,但是对返回的结果处理不同
*/
@Actions({
@Action(value = "test1",results = {
@Result(name = "yes",location = "/Success.jsp"),
@Result(name = "no",location = "/Error.jsp")
}),
@Action(value = "test2",results = {
@Result(name = "yes",location = "/Error.jsp"),
@Result(name = "no",location = "/Success.jsp")
}),
})
public String test1_2()
{
return "yes";
}

/*
* 普通的一个action对应的方法,不同返回值跳转页面不一样
*/
@Action(value = "test3",results = {
@Result(name = "yes",location = "/Success.jsp"),
@Result(name = "no",location = "/Error.jsp")
})
public String test3()
{
return "no";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java注解 struts