Struts2动态结果使用详解

动态匹配结果

动态匹配结果就是通过模式匹配的方式来匹配,关于这一点可以参见这篇《Struts2学习之Action的通配符使用》文章。在这篇文章中已经对这一点进行了详细的总结,这里就不再累述了。

Action属性值定位结果

在配置<result .../>元素时,除了可以使用上述的模式匹配方式以外,还可以使用${属性名}的方式来指定视图资源。在${属性名}这种方式下,${属性名}里的属性名就是对应Action实例里的属性。而且,不仅允许使用这种简单表达式形式,还可以使用完全的OGNL表达式,即以下这种形式:

${属性名.属性名}

关于使用Action属性值的代码示例请参见这篇《Struts2学习之结果类型总结》文章中redirectAction结果类型详解这小节。其中传递参数时,就使用了${属性名}这种方式来获取Action中的属性值。

1.动态结果。

   有时我们需要在Action里取得我个要转跳的页面

看一下我们的struts.xml

 

 代码如下 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- Add packages here -->
     <constant name="struts.devMode" value="true" />
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
   
    <!-- Add packages here -->      
   
    <package name="testdefalult" namespace="/abc" extends="struts-default">                            
       <action name="mya" class="com.pengli.struts.parampack.MyActionOne"  method="Def">
               <result>${value}</result>
       </action>
    </package>
   
   
</struts>

很简单只是把result里用${value}取代了具体和页面,那看一下我们的

action是怎么写的

 代码如下 复制代码

package com.pengli.struts.parampack;

import com.opensymphony.xwork2.ActionSupport;

public class MyActionOne extends ActionSupport{   
    private String strType;
    private String myValue;
    public String Def()
    {
        if(strType!=null&&strType.equals("a"))
        {       
            setValue("/NewJsp.jsp");
                       
        }
        else
        {
            setValue("/Errors.jsp");           
        }
        return SUCCESS;   
    }
    public String getType() {
        return strType;
    }
    public void setType(String type) {
        this.strType = type;
    }
    public String getValue() {
        return myValue;
    }
    public void setValue(String value) {
        this.myValue = value;
    }
}

这是根据type给value赋值,转跳到相应的页面上

http://localhost:8080/Struts16ActionResultsDemo/abc/mya?type=a
正常页面

赋一个别的值

2.带参数的跳转

我们知道redirect形式的转跳是共享值栈的,我们上边说的是&{value}取的是一个整体页面,我们也可以用它来保存和提取参数

这里我们是基于1修改的代码

看一下structs.xml

 代码如下 复制代码
       <action name="myb" class="com.pengli.struts.parampack.MyActionOne"  method="Defb">
               <result>/NewJsp.jsp?v=${type}</result>
       </action>

 

再看一下Action

 代码如下 复制代码

public String Defb()
    {
        if(strType!=null)
        {
            myValue=String.valueOf(Integer.parseInt(strType)+1);
        }
        return SUCCESS;
    }

 

再看一下jsp页面,因为xml里是直接轩跳的,没有经过Action

所以NewJsp.jsp?v=${type}取v的值时要这么取

 

 代码如下 复制代码
<body>
    This is my JSP page. <br>
    parameters v <s:property value="#parameters.v"/>
    <s:debug></s:debug>
  </body>

动态结果跳转

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.devMode" value="true"></constant> 
    <package name="user" namespace="/user" extends="struts-default"> 
        <action name="user" class="com.pegasus.web.UserAction"> 
            <!-- 动态获得跳转的位置 --> 
            <result>${r}</result> 
        </action> 
    </package> 
</struts> 

  

UserAction.java

 代码如下 复制代码

package com.pegasus.web; 
 
import com.opensymphony.xwork2.ActionSupport; 
 
public class UserAction extends ActionSupport { 
    private int type; 
    private String r; 
 
    public int getType() { 
        return type; 
    } 
 
    public void setType(int type) { 
        this.type = type; 
    } 
 
    public String getR() { 
        return r; 
    } 
 
    public void setR(String r) { 
        this.r = r; 
    } 
 
    public String execute() { 
        System.out.println("type:" + type); 
        //在这里定义要跳转的页面的地址 
        if (type == 1) 
            r = "/user_success.jsp"; 
        else if (type == 2) 
            r = "/user_error.jsp"; 
        return "success"; 
 
    } 

总结

这篇文章虽然很短,但是理不糙,还是需要认真的看一看的,没准儿哪天就能用上呢,是吧。

时间: 2024-09-20 07:36:11

Struts2动态结果使用详解的相关文章

MyBatis 执行动态 SQL语句详解_java

大家基本上都知道如何使用 MyBatis 执行任意 SQL,使用方法很简单,例如在一个 XXMapper.xml 中: <select id="executeSql" resultType="map"> ${_parameter} </select> 你可以如下调用: sqlSession.selectList("executeSql", "select * from sysuser where enabled

C++的静态联编和动态联编详解_C 语言

一.概述: 通常来说联编就是将模块或者函数合并在一起生成可执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对外部访问也分配正确的内存地址,它是计算机程序彼此关联的过程.按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编. 静态联编是指在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于指向对象的指针(或者引用)的类型,C语言中,所有的联编都是静态联编,并且任何一种编译器

javascript 实现动态侧边栏实例详解_javascript技巧

javascript 实现动态侧边栏 总的来说就是利用 鼠标悬停onmouseover   和  鼠标移除onmouseout 这两个时间来完成的. 首先是HTML 结构 <body> <div id="div1"> <span>侧边栏</span> </div> </body> 然后是css的样式: #div1{ width:150px; height:200px; background:#999999; pos

入门:Windows环境下PHP动态网页配置详解

入门:详解Windows下PHP5+APACHE+MYSQ完整配置 经过一段时间狂热的PHP编程,对WINDOWS平台下PHP的配置可算是深有感触,一开始我用的是一键安装的傻瓜包,但是考虑傻瓜包的安装版本已经落后,在真正手动配置PHP环境时遇到许多问题,在查阅了许多资料和尝试后,终于配置成功.现在,我将我的配置经验和大家分享一下,相信可以解决大家配置PHP环境的迷惑. 首先说一下我用的软件版本. PHP 5.1.6APACHE 2.0.59(注意:APACHE 2.2.X版本以上要增加插件才支持

Struts2的properties配置文件详解

###指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration ###开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件. #struts.configuration=org.apache.struts2.config.DefaultConfiguration ###设置默认的locale和字符编码 #struts.locale=en_US struts.i1

Servlet动态网页技术详解_JSP编程

一.Servlet简介:随着互联网技术的逐步普及,以及人们对互联网要求提高,以前那种静态网页已经不再是适应,我们看到今天的网页不但有flash,vide等等,显然以前的那种静态网页展示无法解决,为了解决这个问题,SUN公司提供了一门用于解决上述出现的问题的技术,这就是Servlet技术.Servlet是sun公司提供的一门用于开发动态web资源的技术.Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤

java代理模式与动态代理模式详解_java

1.代理模式 所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 生活中的例子:过年加班比较忙,没空去买火车票,这时可以打个电话到附近的票务中心,叫他们帮你买张回家的火车票,当然这会附加额外的劳务费.但要清楚票务中心自己并不卖票,只有火车站才真正卖票,票务中心卖给你的票其实是通过火车站实现的.这点很重要!

Python 抓取动态网页内容方案详解_python

用Python实现常规的静态网页抓取时,往往是用urllib2来获取整个HTML页面,然后从HTML文件中逐字查找对应的关键字.如下所示: 复制代码 代码如下: import urllib2 url="http://mm.taobao.com/json/request_top_list.htm?type=0&page=1" up=urllib2.urlopen(url)#打开目标页面,存入变量up cont=up.read()#从up中读入该HTML文件 key1='<a

深入探讨Linux静态库与动态库的详解(一看就懂)_C 语言

库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静态库和动态库的区别1. 静态函数库这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较大--空间,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了.当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译.2. 动态函数库这类库的名字一般是libxxx.so;相对于静态