Struts2 注解模式

相信大家一定看到了两个class中定义了一样的action,不过看类的元数据,是不同的命名空间。这里比较重要(对我来说)的是

@Action(value = "/login", results = {
        @Result(name = "sucess", location = "/index.jsp"),
        @Result(name = "chain", location = "chain", type = "chain"),// 同namespace下
                                                                    // chain
        @Result(name = "otherNsChain", type = "chain", params = { "namespace",
                "/user", "actionName", "chain" }),// 不同namespace下
        @Result(name = "redirect", type = "redirect", location = "redirect.action"),// 同namespace
        @Result(name = "otherNsRedirect", type = "redirect", location = "/user/redirect.action"),// 不同namespace
        @Result(name = "redirectAction", type = "redirectAction", params = {
                "actionName", "redirectAction" }),// 同namespace
        @Result(name = "otherNsRedirectAction", type = "redirectAction", params = {
                "namespace", "/user", "actionName", "redirectAction" }) // 不同namespace
})

这里面results的配置,当result的type是chain的时候,如果是同一个命名空间,那么就可以直接写一个
action的name,如果加上后缀名比如.action的话struts就会报错,找不到execute()方法,如果不是同一个命名空间下,则需要
添上params,params是一个String数组形式的容器,{“key1”,“value1”,“key2”,“value2”}以这种形式书
写,关与params的更多信息可以参考xwork-core包里的

com.opensymphony.xwork2.ActionChainResult.class

。redirect的一致,如果在不同的命名空间,直接写命名空间+action的名字。
redirectAction的和chain差不多,但也有些许的区别。redirectAction没有location的配置,action的
name需要在params里面配置,key为actionName,namespace也需要在params里面配置,key为namespace。更
多的请参考struts-core下的

org.apache.struts2.dispatcher.ServletActionRedirectResult.class

。下面附上一些常用的几个result type的类

 <result-types>
            <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
            <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
            <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
            <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
            <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
            <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
            <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
            <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
            <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
            <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
 </result-types>
  1. 基本上常用的以上都有了,包括上面提到的chain和redirectAction。 其实这些在struts-default.xml 也可以找到 。这些类里面有他们可接受配置的demo。
  2. 写2个在搭建环境的时候遇到的异常。
  3. java.lang.NoSuchMethodException:
    com.struts2.action.IndexAction.execute()
    可能是是配置有问题,比如我在上文说的在action的name中加上了后缀名或者也可能是在配置的时候action名前写了一个/ 。@Result(name="chain", location = "chain",type="chain")这句代码如果在location的chain前加一个/,可能也会造成这个异常。
    • 还有一个异常是 提示没有create方法,这个可能是因为struts里面rest的插件和action冲突了。
    • 注:以上两个异常不一定就是我说的问题引发的,真正的原因还是需要你自己去细细排查来确认的。
时间: 2024-10-11 23:35:16

Struts2 注解模式的相关文章

Annotation(四)——Struts2注解开发

Hibernate和Spring框架的开发前边总结了,这次看一下流行的MVC流程框架Struts2的注解开发吧.Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: [html] view plaincopyprint? <span style="font-size:18px;">  <!-- 这是包名和命名空间的声明 --> <package name

Struts2注解

需要包 struts2-convention-plugin.jar @Namespace("/xxxx/zzz") public class ConnectionAction { /** Action执行方法* */ @Action(value = "ConnectManage", results = { @Result(name = "success", location = "aaa.jsp"), @Result(name

spring的配置模式与注解模式基础

“依赖注入”是spring的核心特征,在Web服务器(如Tomcat)加载时,它会根据Spring的配置文件中配置的bean或者是通过注解模式而扫描并装载的bean实例自动注入到ApplicationContext容器中(ApplicationContext容器管理了被注入的bean对象). 下面做两个简单测试以说明spring“依赖注入“的两种模式:配置模式与注解模式. 测试工具: 一.新建spring配置文件,放在类目录下 在“src”上右键点"new",选择"Other

JAVA-SpringMVC基于注解模式第一个应用

项目文件结构 1. web.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun

Struts2注解指定Action扫描路径

使用spring和struts2集成全注解时 struts2默认扫描包名 action,actions,struts,struts2 的包 如果action不存在以上包时 就不会扫描到 此时需要在struts.xml中增加注释 <constant name="struts.convention.package.locators" value="action,actions,struts,struts2,admin"/> admin为增加的包名 Strut

Struts2注解 特别注意

1 Struts2注解的作用 使用注解可以用来替换struts.xml配置文件!!! 2 导包 必须导入struts2-convention-plugin-2.3.15.jar包,它在struts2安装包下lib目录中. 3 通过配置文件学习对应的注解 @Action来代替<action>元素! l  String value():指定访问路径: l  Result[] results():指定局部结果. @Result来代替<result>元素! l  String name()

Struts2开发者模式

在Struts2开发中,这应该是第一个学习配置的值.为了启用 Struts 2 的开发模式,可以通过自动配置显著增加Struts2的开发速度和属性文件加载,以及额外的日志和调试功能. 注:自动重新加载功能真的是一个方便的功能.每次修改属性或XML配置文件更改,应用程序不再需要重启才能生效. 默认情况下,Struts 2的开发模式是禁用的. 启用Struts2开发模式 将"struts.devMode"的值设置为true,可以在Struts的属性文件或XML配置文件. struts.pr

Mybatis(dao层)基于注解模式的配置方式

1.还是要新建Shop.xml文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dao.Sh

Struts2注解详解

一,引入支持Struts2支持注解开发jar包: struts2-convention-plugin-2.1.8.1.jar(支持Struts2框架注解开发的jar包) 二,Struts2使用注解开发需要遵循一些规范: 1,Action要必须继承ActionSupport父类: 2,Action所在的包名必须以  .action 结尾. 三,action中常用的注解: 1,@ParentPackage:对应xml配置文件中的package的父包,一般需要继承struts-default. 2,@