Struts2(六)result-程序员宅基地

技术标签: java  json  

一、result简述

result:输出结果;第个Action返回一个字符串,Struts2根据这个值来决定响应结果

name属性:result的逻辑名。和Actin里的返回值匹配,默认"success"

值 :指定对应的实际资源位置

二、Action中返回其它值

 如果Action中返回其它扯,result中的Name属性要与之对应才可以找到指定的资源

 Action默认定义了一些常量,可以拿来使用

package com.opensymphony.xwork2;

public interface Action {

   
    public static final String SUCCESS = "success";

    public static final String NONE = "none";

 
    public static final String ERROR = "error";

  
    public static final String INPUT = "input";

    public static final String LOGIN = "login";



}

三、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>
这个配置显示了几种常见的结果类型,关于这些以及其他结果类型,各自作用简介如下:
dispatcher: 将请求转发(forward)到本应用程序中指定的资源(JSP 或Servlet)
chain: Action 链式处理,将请求转发(forward)到指定的Action
redirect: 请求重定向到指定的 URL(页面或者Action)
redirectAction: 请求重定向到指定的Action
json:实现Ajax 时返回JSON 对象
freemarker:处理FreeMarker 模板
httpheader:控制特殊HTTP 行为的结果类型
stream:像浏览器发送InputStream 对象,通常用来处理文件下载,还可用于返回Ajax
数据
velocity:处理Velocity 模板
xslt:处理XML/XLST 模板
plainText:显示原始文件内容,例如文件源代码

 

package com.pb.web.action;
import com.opensymphony.xwork2.ActionSupport;
import com.pb.entity.User;
/*
 * 登录响应action 以javaBean方式接收用户登录输入的用户名和密码
 */
public class LoginAction extends ActionSupport {

    private static final long serialVersionUID = 1L;
    //实例化对象
    private User user;

    //要有execute方法
public String execute(){
    return SUCCESS;
}
public String login(){
    if(user.getUserName().equals("accp") && user.getPassWord().equals("accp")){
        return SUCCESS;
    }else{
        return INPUT;
    }
}
    
public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

}
 <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    
    
    <package name="default" namespace="/" extends="struts-default">
    
    <action name="login" class="com.pb.web.action.LoginAction" method="login">
    <result name="success" type="redirect">
    /loginSuccess.jsp
    </result>
    <result name="input" type="dispatcher">
    /login.jsp
    </result>
    </action>
<package name="user" namespace="/user" extends="struts-default">
<action name="login" class="com.pb.web.action.UserAction">
<result type="chain">
<param name="actionName"> houseAction </param>
<param name="namespace"> / house </param>
</result>
</action>
</package>
<package name="house" namespace="/house" extends="struts-default">
<action name=" houseAction " class="com.pb.web.action.HouseAction">
<result>
/houseSuccess.jsp
</result>
</action>
</package>

 

四、全局结果

package com.pb.web.action;

import com.opensymphony.xwork2.ActionSupport;

public class HourseAction extends ActionSupport {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public String add(){
        System.out.println("执行添加操作!");
    try{    
        if(1==1){
        //调用service的方法
            throw new Exception();
        }
    }catch (Exception e){
        e.printStackTrace();
        return ERROR;
    }
    
        return "success";
    }
    public String update(){
        System.out.println("执行更新操作!");
        try{    
            if(1==1){
            //调用service的方法
                throw new Exception();
            }
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
        return "success";
    }
    public String delete(){
        System.out.println("执行删除操作!");
        try{    
            if(1==1){
            //调用service的方法
                throw new Exception();
            }
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
        return "success";
    }

    
}
 <global-results>
    <result name="error">/error.jsp</result>
    </global-results>
<!-- <action name="hourse_*" class="com.pb.web.action.HourseAction" method="{1}">
    <result name="success" type="dispatcher">
    {
     1}success.jsp
    </result>
    </action> -->
    <action name="hourse_add" class="com.pb.web.action.HourseAction" method="add">
    <result name="success" type="dispatcher">
    /loginSuccess.jsp
    </result>
    </action>
    <action name="hourse_update" class="com.pb.web.action.HourseAction" method="update">
    <result name="success" type="dispatcher">
    /loginSuccess.jsp
    </result>
    </action>
    <action name="hourse_delete" class="com.pb.web.action.HourseAction" method="delete">
    <result name="success" type="dispatcher">
    /loginSuccess.jsp
    </result>
    <result name="error">/error1.jsp</result>
    </action>
    </package>

五、动态结果

 

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>登录页面</title>
</head>
<body>
<form action="user/login.action" method="post">
<table>
<tr>
<td>用户名:</td>
<!--这里的name要和提交的地址中声明的实体类.属性来用  -->
<td><input type="text" name="user.username" /></td>
</tr>
<tr>
<td>密码:</td>
<!--这里的name要和提交的地址中声明的实体类.属性来用  -->
<td><input type="password" name="user.password" /></td>
</tr>
<tr>
<td><input type="submit" value="登录" /></td>
<td><input type="reset" value="重置" /></td>
</tr>
</table>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>管理员用户页面</title>
</head>
<body>
管理员用户页面

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>普通用户</title>
</head>
<body>
普通用户页面
</body>
</html>

User实体类

package com.pb.enity;

public class User {
    
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
    
    

}

 

UserAction

package com.pb.web.action;

import com.opensymphony.xwork2.ActionSupport;
import com.pb.enity.User;

public class UserAction extends ActionSupport {

    private static final long serialVersionUID = 1L;
    private User user;
    //下一个中转的Action
    private String nextDispose;
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public String getNextDispose() {
        return nextDispose;
    }
    public void setNextDispose(String nextDispose) {
        this.nextDispose = nextDispose;
    }

    public String login(){
        //用户是admin就转到adminAction
        if(user.getUsername().equals("admin") && user.getPassword().equals("admin")){
            nextDispose="admin";
            return SUCCESS;
            //用户是admin就转到commonAction
        }else if(user.getUsername().equals("common") && user.getPassword().equals("common")){
            nextDispose="common";
            return SUCCESS;
            //其它就跳转到登录页面
        }else{
            return INPUT;
        }
    }
    
    
    
}

CommonAction

package com.pb.web.action;

import com.opensymphony.xwork2.ActionSupport;

public class CommonAction extends ActionSupport {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    public String execute() throws Exception {
        
        return SUCCESS;
    }

}

AdminAction

package com.pb.web.action;

import com.opensymphony.xwork2.ActionSupport;

public class AdminAction extends ActionSupport {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return SUCCESS;
    }

}

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>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <!-- Add packages here -->
    <package name="user" namespace="/user" extends="struts-default">
    <action name="login" class="com.pb.web.action.UserAction" method="login">
    <!-- 通过${}取出在UserAciton中定义的变量对应下面的action name -->
    <result name="success" type="redirectAction">${nextDispose}</result>
    <result name="input">/login.jsp</result>
    </action>
    <action name="admin" class="com.pb.web.action.AdminAction">
    <result name="success">/admin.jsp</result>
    </action>
     <action name="common" class="com.pb.web.action.CommonAction">
    <result name="success">/common.jsp</result>
    </action>
    </package>

</struts>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34235135/article/details/85709442

智能推荐

xml解析(demo4j+xpath)-程序员宅基地

xml解析切入主题之前我来回答一下为什么要解析xml?1.可以在不同应用程序之间的通信。2.可以在不同平台之间的通信。3.可以在不同平台之间的数据共享。xml的作用是什么?“XML是被设计用来存储数据、携带数据和交换数据的,通过XML,可以在不兼容的系统之间交换数据,利用XML, 纯文本文件可以用来存储数据。在不使用XML时,HTML用于显示数据,数据必须存储在HTML文件之内。XML..._demo4j

EXCEL执行SQL语句-EXCEL实现group by功能_excel group by_击晕君的博客-程序员宅基地

突然要用到类似数据库中group by的方法统计数据,找了很久怎么在excel上实现都没有找到很好的解决方法(很多说是用数据透视表,数据合并之类的,但是感觉效果不理想)最后终于找到了可以用VBA实现,就算没学过VBA,按照下面的方法,修改一下参数就可以实现当前文件表格的合并计算了第一步:原文件上新建一个工作表第二步:右键点工作表页签名,找到“查看代码”第三步:编写代码Sub 合计()Set CONN = CreateObject("ADODB.Connection")CONN_excel group by

vue-router 官方文档学习_vue-router官方文档_望月寄明的博客-程序员宅基地

安装npm install vue-router简单使用# 在 main.js 文件中import Vue froom 'vue'import VueRouter from 'vue-router'Vue.use(VueRouter);import User from '@/views/User'import Login from '@/views/Login'let vueRouter = new VueRouter({ routes: [ { path: "/"_vue-router官方文档

VS2019+OpenCV3.4.1_vc14vc15配置简介(防忘记)_vs2019 vc15-程序员宅基地

1、下载安装openCV3.4.1for VC版本解压后的文件目录如下:build文件夹是编译生成的文件,sources文件夹是源码库要想详细了解目录中的内容,可以参考下面的博客:https://blog.csdn.net/u011574296/article/details/69421922 **接下来我们要配置开发环境,需要进行以下几个简单步骤: A.配置系统环境变量 B.配置开发环境**A.配置系统环境变量搜索打开环境变量的设置界面找到系统变量下的path,_vs2019 vc15

bzoj4568: [Scoi2016]幸运数字 点分治+线性基-程序员宅基地

bzoj4568: [Scoi2016]幸运数字DescriptionA 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一。每座城市都有一个 幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征。一些旅行者希望游览 A 国。旅行者计划 乘飞机降落在 x 号城市,沿着 x 号城市到 y 号城市之间那条唯一的路径游览,最终从 y 城市起...

android win7共享文件夹,win7系统共享文件夹如何用手机看电脑里面的电影_筱杰哥哥的博客-程序员宅基地

很多win7纯净版64位的小伙伴,一般都是这样操作的。手机和电脑都联上网后把电脑里的电影传输到手机里再播放。一来二去很浪费时间。其实不用这么麻烦,手机通过连接wifi已经与电脑在同一个局域网内了,这时我们只要稍微设置下,就可以用手机直接看电脑里面的电影了。具体的步骤我们跟着爱纯净一起了解下吧!win7系统共享文件夹如何用手机看电脑里面的电影:第一步:首先我们把win7电脑的电影,电视剧设置成共享。..._win7局域网内手机如何播放电脑上的视频文件

随便推点

强烈推荐几个技术人员必备网站-程序员宅基地

现在网络上面的关于技术的各类资源数不胜数,在这里我精选了几个技术人员一定用得着得网站,通过这些网站可以快速的进行学习和积累,解决日常的技术问题,赶快看看吧

matlab龙格库塔法调用,matlab用龙格库塔法求解微分方程组_夏洛喵的博客-程序员宅基地

共回答了13个问题采纳率:84.6%解方程很简单,调用ode45即可关键是求运动时间,假设z方向坐标变为0即为落至地面运动结束,可求得运动时间的近似值及落地点坐标代码如下:clear allclcc=0.07;u0=25;a=pi/6;f=@(t,x)([x(2);-c*sqrt(x(2)^2+(x(4)-7-.35*x(5))^2+x(6)^2)*x(2);x(4);-c*sqrt(x(2)^2..._龙格库塔法解含达芬微分方程组matlab

人工智能:风口之上泡沫之中谨慎入坑-程序员宅基地

现在有越来越多的事情都在向人工智能贴,仿佛咸鱼贴了 AI 的标就成了在风口上飞起来的猪。还有一些不负责任的人鼓动去转行 AI,显然这些人不是蠢,只是单纯的坏而已,为了蹭热点置其他人未来于不顾。放弃自己现在的行业积累,去做一个完全陌生的领域完全就是一个反职业发展逻辑的路。目前而言由于一些简单工具的提出比如 Keras、TensorFlow 使得越来越多的人感觉人工智能只是使用一些工具而已。Spar...

数字电路A_扇入扇出数 数字电路-程序员宅基地

与-或表达式指由若干个与项进行或逻辑运算构成的表达式或-与表达式指由若干个活像进行与逻辑运算构成的表达式例题:答案见PPT第二章配项消去法例题4答案见PPT第二张配项消去法例题5注意:逻辑函数的化简结果不是唯一的!步骤3. 最大项与最小项的关系:互为反函数,但是其卡诺图的编号原则相同4. :导通延迟时间tPHL——从输入波形上升沿的中点到输出波形下降沿的中点所经历的时间截至延迟时间tPLH——从输入波形下降沿的中点到输出波形上升沿的中点所经历的时间与非门的传输延迟时间tpd是tPHL_扇入扇出数 数字电路

后台接口文档模板_标准的后端接口文档-程序员宅基地

文档模板### {接口名称}>{method} HTTP://{ip}:{port}/{path}**参数**- `{参数名称}` {描述} {example} 非必填项 - {枚举值} 如果是枚举类型- **`{参数名称}`** {描述} {example} 必填项 **响应** `{响应类型}`{响应示例代码}example测试接口get ..._标准的后端接口文档

初学java2E-程序员宅基地

UML统一建模语言类框图圆形时序图组件图部署图Collection接口1.1 集合框架的顶级接口1.2 是Set和List的父接口1.3 但不是Map的父接口List接口2.1 特点:有序、对象可以重复2.2 遍历方式2.2.1 下标2.2.2 foreach(>=jdk1.5)2.2.3 迭代器Iterator2.3 List优化初始容量10..._java2e