`
wutheringsea
  • 浏览: 263372 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Struts2注解配置Action

阅读更多

最近在看Struts2的showcase,本打算先找个简单的看看,就选择了person,要么说没有中彩票的运气,第一个例子我就看不明白了,person的index.jsp里是这样调用action的
<html>
<head>
    <title>Acme Corp</title>
</head>

<body>
<ul>
    <li><a href="newPerson!input.action">Create</a> a new person</li>
    <li><a href="listPeople.action">List</a> all people</li>
</ul>
</body>
</html>
但是在struts-person.xml里却没有这个action的声明,只是声明了一个包,也没有默认的action类,后来”百度“了一下才知道,这个是Struts2的新特性,使用注解配置Action。

  使用注解配置Action第一个要做的就是在web.xml中配置FilterDispatcher,为FilterDispatcher设置actionPackages参数,指定包含了Action类的包的列表,多个包之间用(,)分割,这些包和他们的子包都会被扫描。扫描的对象是包中所有实现了Action接口,或者以"Action"结尾的类。顺便说一下类名的匹配方法,把类名的第一个字母小写,如果以Action结尾的,去掉Action。比如说一个类叫 DeletePersonAction 那么他的请求应该是deletePersion.action。
    <filter>
        <filter-name>struts-prepare</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
        <init-param>
            <param-name>actionPackages</param-name>
            <param-value>org.apache.struts2.showcase.person</param-value>
        </init-param>
    </filter>
  这个配置的意思就是会扫描org.apache.struts2.showcase.person包里所有实现了Action接口,或者以"Action"结尾的类,所以"newPerson!input.action"这个请求对应的类应该是NewPersonAction的input方法。

  我们再看看NewPersonAction.java这个文件
@ParentPackage("person")
public class NewPersonAction extends ActionSupport {

    private static final long serialVersionUID = 200410824352645515L;

    PersonManager personManager;
    Person person;

    public void setPersonManager(PersonManager personManager) {
        this.personManager = personManager;
    }

    public String execute() {
        personManager.createPerson(person);

        return SUCCESS;
    }

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}
  所谓的零配置就是把相关的注解写到Action类里,比如ParentPackage,Namespace,Result,Results
  例如:
@Namespace("/person")     //指定名称空间
@ParentPackage("person") //指定继承的包,struts-default无需指定
@Result("/success.jsp") //指定success,因为success是默认的,所以不用指定name
@Results({
    @Result("name="input", value="/input.jsp"),
    @Result("name="error", value="/error.jsp", type=ServletDispatcherResult.class)
    })
public class NewPersonAction extends ActionSupport {

    。。。。
}

  但是NewPersonAction.java里并没有指定result,那它是怎么转移的呢?这个是codebehind插件的作用。在struts.xml里有这样的设定,也就是说person这个包应用了codebehind的功能
<constant name="struts.codebehind.defaultPackage" value="person" />

 

 

 

按照以上参考资料,我将以前用xml配置action的测试项目修改如下:

 

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        
        <init-param>          <!-- 添加使用注解必须的参数-->
        <param-name>actionPackages</param-name>
        <param-value>com.testman.action</param-value>  
        </init-param>
   
    </filter>

 

 

 

    在struts.xml中注释掉以前的配置信息

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <!-- <constant name="struts.codebehind.defaultPackage" value="action" /> -->
    <constant name="struts.i18n.encoding" value="UTF-8"/>
    <constant name="struts.serve.static.browserCache" value="false"/>
   <!-- <constant name="struts.action.extension" value="do"/>
    <constant name="struts.configuration.xml.reload" value="true"/>
    <constant name="struts.devMode" value="true" /> -->
     <!-- 默认的视图主题 -->
    <constant name="struts.ui.theme" value="simple" />
    <!--下面表示action对象是spring负责创建的 -->
    <constant name="struts.objectFactory" value="spring" />
    
 	<!-- <package name="fundbalance" namespace="/fundbalance" extends="struts-default">
 		<global-results>
 			<result name="message">/WEB-INF/page/fundbalance/message.jsp</result>
 		</global-results> -->
		<!-- <action name="action_*" class="fundBalanceList" method="{1}">  -->         <!-- "fundBalanceList"对应的是spring容器中bean的名称 -->
		<!--	<result name="list">/WEB-INF/page/fundbalance/fundbalancelist.jsp</result>
			<result name="add">/WEB-INF/page/fundbalance/addfundbalance.jsp</result>
			<result name="update">/WEB-INF/page/fundbalance/updatefundbalance.jsp</result>
			<result name="query">/WEB-INF/page/fundbalance/fundbalancelist.jsp</result>
		</action> 
		
    </package> -->

</struts>

 

    action修改如下

 

package com.testman.action;

import java.util.List;

import javax.annotation.Resource;

import org.apache.struts2.config.Namespace;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;

import com.opensymphony.xwork2.ActionSupport;
import com.testman.bean.FundBalance;
import com.testman.service.FundBalanceService;

@Namespace("/fundbalance")
@Results({
	@Result(name="list",value="/WEB-INF/page/fundbalance/fundbalancelist.jsp"),
	@Result(name="add",value="/WEB-INF/page/fundbalance/addfundbalance.jsp"),
	@Result(name="addUI",value="/WEB-INF/page/fundbalance/addfundbalance.jsp"),
	@Result(name="update",value="/WEB-INF/page/fundbalance/updatefundbalance.jsp"),
	@Result(name="updateUI",value="/WEB-INF/page/fundbalance/updatefundbalance.jsp"),
	@Result(name="query",value="/WEB-INF/page/fundbalance/fundbalancelist.jsp"),
	@Result(name="message",value="/WEB-INF/page/fundbalance/message.jsp")
})
//@Result("/index.jsp")
public class FundBalanceAction extends ActionSupport{
	@Resource FundBalanceService fundBalanceService;
	private String message;
	private List<FundBalance> fundbalances;
	private FundBalance fundbalance;
	private String delkeys;
	

	public FundBalance getFundbalance() {
		return fundbalance;
	}
	public void setFundbalance(FundBalance fundbalance) {
		this.fundbalance = fundbalance;
	}
	/**
	 */
	public String list(){
		this.fundbalances = fundBalanceService.getAllFundBalance();
		return "list";
	}
	/**
	 */
	public String addUI(){
		return "add";
	}
	
	public String updateUI(){
		fundbalance = fundBalanceService.queryFundBalanceById(this.fundbalance).get(0);
		return "update";
	}
	/**
	 */
	public String add(){
		this.fundBalanceService.save(this.fundbalance);
		this.message="数据保存成功!";
		return "message";
	}
	/**
	 */
	public String update(){
		this.fundBalanceService.update(this.fundbalance);
		this.message="数据更新成功!";
		return "message";
	}
	
	public String query(){
		this.fundbalances = fundBalanceService.queryFundBalanceByYearMonthItem(this.fundbalance);
		return "query";
	}
	
	public String del(){
		if(this.delkeys.contains(",")){
		
		String[] keys = this.delkeys.split(",");
	    for(String key : keys){
	    if(!"".equals(key)){
		this.fundBalanceService.delete(key);
		 }
	    }
	    }else{
	    this.fundBalanceService.delete(delkeys);	
	    }
		this.message="数据删除成功!";
		return "message";
	}

	
	public List<FundBalance> getFundbalances() {
		return fundbalances;
	}
	public void setFundbalances(List<FundBalance> fundbalances) {
		this.fundbalances = fundbalances;
	}
	
	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	
	public String getDelkeys() {
		return delkeys;
	}
	public void setDelkeys(String delkeys) {
		this.delkeys = delkeys;
	}
	
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}
	
}
 最后,页面上再把action的指向修改成 形如 fundBalance!add.action 即可。
分享到:
评论

相关推荐

    struts2注解配置Action及拦截器几种不同方式写法对应的路径指向.docx

    "Struts2 注解配置 Action 及拦截器几种不同方式写法对应的路径指向" Struts2 注解配置 Action 及拦截器是 Struts2 框架中的核心组件之一,负责处理用户请求并返回响应结果。下面,我们将通过详细的解释和示例代码...

    Struts 2使用注解配置Action

    在"Struts 2使用注解配置Action"中,我们不再需要在struts.xml中为每个Action类手动添加配置。相反,我们可以在Action类或者方法上直接使用注解来声明它们的功能。这样不仅提高了代码的可读性,还使得配置更加灵活。...

    struts2中使用注解配置Action方法详解

    Struts2中使用注解配置Action方法详解 Struts2框架提供了四个与Action相关的注解类型,分别为ParentPackage、Namespace、Result和Action。这四个注解类型可以帮助开发者更方便地配置Action,实现零配置,零配置将从...

    Struts2注解配置教程

    Struts2注解配置教程是指导开发者如何使用Java注解替代传统的XML配置来配置Struts2框架的一个教程系列。本文档主要涵盖了Struts2中注解配置的一些基本知识点以及如何通过注解实现零配置。 ### 注解配置之前 在介绍...

    struts2注解配置全面解析

    本文旨在为读者提供一套详尽的Struts2注解配置指南,帮助大家快速理解和掌握如何通过注解来配置Struts2的Action。 #### 二、Struts2注解配置基础 ##### 1. Struts2注解支持概述 - **插件依赖**:要启用Struts2的...

    struts2注解配置

    Struts2注解配置是Java Web开发中一种高效、简洁的框架配置方式,它允许开发者在类或方法级别上直接定义Action、结果类型、参数映射等信息,从而避免了传统XML配置文件的繁琐。本资料集合了关于Struts2注解配置的...

    Struts2+spring注解配置

    Struts2 和 Spring 的整合是企业级 Java Web 开发中常见的技术栈,通过注解配置可以使项目更加简洁、易于维护。Struts2 提供了一种使用注解替代 XML 配置的方式,使得开发者无需编写繁琐的 struts.xml 文件,即可...

    struts2注解登陆

    Struts2注解登录是Java Web开发中一种简化配置的方式,它允许开发者在代码中直接定义控制器、动作和结果页面的映射,从而避免了传统方式下需要在`struts.xml`配置文件中的繁琐设置。这种做法提高了代码的可读性和可...

    Struts2 注解 Demo

    本教程将通过一个"Struts2注解Demo"来深入探讨Struts2中的注解用法,帮助开发者更高效地配置和管理Action类。 首先,Struts2的注解允许我们避免传统的XML配置,从而实现更加简洁、直观的编程方式。在`Struts2Demo`...

    Struts2注解详细说明文档

    Struts2 Convention Plugin允许开发者通过注解来配置Action名称、拦截器、命名空间等,极大地简化了配置过程。 ##### 2.7 默认Action及结果 当用户访问特定路径时,如果没有显式定义Action,则Convention Plugin会...

    Struts2注解开发jar

    在Struts2框架中,注解开发是一种简化配置的方式,它允许开发者在类或方法级别直接标注,以定义动作、结果、参数等信息,从而减少XML配置文件的使用。本知识点将详细介绍Struts2中的注解开发及其核心组件。 标题...

    Maven实现struts2注解

    在Struts2中,注解提供了一种声明式的方式来配置Action类和结果页面,而无需编写XML配置文件。这使得代码更加简洁,易于理解和维护。例如,你可以使用`@Action`注解标记一个方法作为处理用户请求的Action,使用`@...

    struts2注解详解

    可以通过配置项 `struts.convention.package.locators` 来指定搜索的位置,例如:`actions`, `action`, `struts`, `struts2` 等。这表示框架会在这些命名空间下查找 Action 类。此外,还可以通过 `struts.convention...

    struts2注解配置简单实例

    在这个例子中,`src/main/java`下会有Action类,`src/main/resources`可能包含Struts2的配置文件,尽管在注解配置中我们可能不再需要传统的XML配置。此外,`src/main/webapp`目录下会存放JSP页面和其他Web资源。 在...

    struts2注解必须包

    这个插件的核心功能就是利用注解来自动配置Action、结果类型、参数映射等,使得开发过程更加便捷。2.1.8.1是这个插件的版本号,每个版本可能包含性能优化、新特性和bug修复。 在Struts2中,以下几个关键注解经常被...

    Struts2之Annotation注解配置使用案例struts013

    首先,了解`@Action`注解是理解Struts2注解配置的关键。这个注解用于标记一个类或方法作为处理HTTP请求的动作。例如: ```java @Action(value = "saveUser", results = { @Result(name = "success", location = ...

    使用注解配置Action

    总结一下,Struts2的注解配置Action可以简化开发流程,提高效率。`@Action`和`@Result`注解是主要的工具,它们帮助我们定义Action的URL和结果页面。同时,遇到`NoClassDefFoundError`异常时,检查并确保项目依赖正确...

    Struts2+spring注解配置简介

    Struts2的注解配置主要集中在Action类和结果类型上。使用@Action注解,我们可以直接在Action类上声明其对应的URL路径,而无需在struts.xml文件中进行配置。例如: ```java @Action(value = "saveUser", results = {...

    struts2 使用注解现在零配置不需要在使用struts.xml配置文件,可以直接跑

    此外,Struts2还提供了其他注解,如`@Results`、`@Namespace`、`@ParentPackage`等,它们分别用于定义一组结果、Action所属的命名空间以及继承的配置包。这些注解可以帮助我们在不编写XML配置的情况下,完成大部分的...

    Struts2注解使用说明文档

    Struts2 是一个流行的Java Web框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在Struts2的版本2.1之后,它引入...例如,可以使用Struts2的注解(如`@Action`,`@Result`等)来覆盖或补充Convention的默认行为。

Global site tag (gtag.js) - Google Analytics