Java零配置详解(二)

另外的配置说明如下:

 

Using our example from above, the XWork package for our action would be:

上例中,action对应的 XWORK package如下:

XWork package naming

com.example.actions#/#conventionDefault

Annotation 参考

Convention使用某些注解语句来覆写插件默认的actionurl的映射和自动搜索渲染到的页面。此外,你还可以修改action配置文件中定义的父XWORK的包信息

Action annotation

Convention 插件可以使用Action注解语句来修改action返回的URL地址。本注解同时也允许包含在Actions语句中,用来使一个action对应于多个URL。在action 方法中使用本注解语句,可以参考以下代码

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

 

public class HelloWorld extends ActionSupport {

  @Action("/different/url")

  public String execute() {

    return SUCCESS;

  }

}

现在我们action类中将使用 /different/url 来替代默认的 /hello-world,如果未指定@Result(参考下节),result的路径将会使用actionnamespace,上面的例子中将会返回一下路径 "/WEB-INF/content/different/url.jsp"

Action类中的单个方法可以使用Actions 注解来映射多个地址。

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

 

public class HelloWorld extends ActionSupport {

  @Actions({

    @Action("/different/url"),

    @Action("/another/url")

  })

  public String execute() {

    return SUCCESS;

  }

}

另外的 Action Actions 的使用方法是,在单个action类中定义多个action方法,每个方法对应一个不同的地址。下面是多个action方法的范例:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

 

public class HelloWorld extends ActionSupport {

  @Action("/different/url")

  public String execute() {

    return SUCCESS;

 

  }

 

  @Action("url")

  public String doSomething() {

    return SUCCESS;

  }

}

前面的例子中,第二个URL地址是不推荐的,上面url将使用java 包名作为namespace,而不会直接使用Action注解的地址。

Interceptor interceptor stacks 同样可以使用interceptorRefs 注解来指定。下例演示了在action中同时添加"validation""defaultStack"拦截机。

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

 

public class HelloWorld extends ActionSupport {

  @Action(interceptorRefs={@InterceptorRef("validation"), @InterceptorRef("defaultStack")})

  public String execute() {

    return SUCCESS;

  }

 

  @Action("url")

  public String doSomething() {

    return SUCCESS;

  }

}

可以通过params属性来将参数传递给结果。属性的值是一个偶数个元素的String的数组,由形如{"key0", "value0, "key1", "value1" ... "keyN", "valueN"}所组成,举个例子:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

 

public class HelloWorld extends ActionSupport {

  @Action(interceptorRefs=@InterceptorRef(value="validation",params={"programmatic", "false", "declarative", "true}))

  public String execute() {

    return SUCCESS;

  }

 

  @Action("url")

  public String doSomething() {

    return SUCCESS;

  }

}

如果未指定interceptors,将会使用默认的。

InterceptorRef annotation

Interceptors 可以在方法级进行指定,使用Action 注解或在类上使用InterceptorRefs注解。Class级别的拦截会被应用到类包含的所有action上。可以参考下面例子:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

 

@InterceptorRefs({

    @InterceptorRef("interceptor-1"),

    @InterceptorRef("defaultStack")

})

public class HelloWorld extends ActionSupport {

  @Action(value="action1", interceptorRefs=@InterceptorRef("validation"))

  public String execute() {

    return SUCCESS;

  }

 

  @Action(value="action2")

  public String doSomething() {

    return SUCCESS;

  }

}

下面的拦截机将会应用到“action1”中:"interceptor-1","defaultStack"中的所有拦截机, "validation"

"defaultStack"中的所有拦截机也会对”action2”生效

Result annotation

Convention 允许action类为每个action定义不同的resultsresults分为两类,全局的(global)和本地的(local),全局results可以被action类中所有的action分享,这种resultsaction类上使用注解进行声明。本地results只能在action方法上进行声明。下面是两种results注解的例子:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

import org.apache.struts2.convention.annotation.Result;

import org.apache.struts2.convention.annotation.Results;

 

@Results({

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

})

public class HelloWorld extends ActionSupport {

  @Action(value="/different/url",

    results={@Result(name="success", location="http://struts.apache.org", type="redirect")}

  )

  public String execute() {

    return SUCCESS;

  }

 

  @Action("/another/url")

 

  public String doSomething() {

    return SUCCESS;

  }

}

参数同样可以在results中通过params属性进行传递,和上面一样,由形如{"key0", "value0, "key1", "value1" ... "keyN", "valueN"}所组成。可参考下例:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

import org.apache.struts2.convention.annotation.Result;

import org.apache.struts2.convention.annotation.Results;

 

public class HelloWorld extends ActionSupport {

  @Action(value="/different/url",

    results={@Result(name="success", type="httpheader", params={"status", "500", "errorMessage", "Internal Error"})}

  )

  public String execute() {

    return SUCCESS;

  }

 

  @Action("/another/url")

  public String doSomething() {

    return SUCCESS;

  }

}

Namespace annotation

namespace注解允许action使用指定的路径替代默认的以package包名作为路径。本注解可以在action类或Java 包中的package-info.java类中进行设置。设置在action类中的namespace注解,对本action类中所有的action都有效,这是不完全合乎规范的action URL处理地址。设置在package-info.java中的namespace注解,将会改变本java包下所有的action的默认namespace。下面是此注解的例子:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Namespace;

 

@Namespace("/custom")

public class HelloWorld extends ActionSupport {

  @Action("/different/url")

  public String execute() {

    return SUCCESS;

  }

 

  @Action("url")

  public String doSomething() {

    return SUCCESS;

  }

}

在上例中的action 会对2个不同的地址响应:/different/url  /custom/url

下面是一个在package-info.java中使用namespace注解的例子

com/example/actions/package-info.java

@org.apache.struts2.convention.annotation.Namespace("/custom")

package com.example.actions;

这会改变com.example.actions包下所有action的默认namespace请注意一点,本注解不会应用到子一级的包中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值