struts2 Action如何返回到视图中

来源:互联网 发布:关键词大数据 编辑:程序博客网 时间:2024/06/06 03:06

Struts2框架 通过配置 result标签来 把Action的处理结果和视图对应,来决定Action返回到哪一个视图
1.Action的处理结果是一个字符串,Action把这个处理结果交给Struts2框架
2.Struts2框架决定这个处理结果对应哪个视图。

<struts>    <package name="users" namespace="/users" extends="struts-default">              <action name="*_*" class="action.{1}Action" method="{2}">            <!-- name:action返回结果,默认是success -->            <!-- result的值 如果有"/" 表示:.jsp页面的绝对路径 -->             <!-- result的值 如果没有有"/" 表示:jsp页面 是执行action所在的package-namespace指定的路径-->            <result name="success">/users/success.jsp</result>              </action>    </package></struts>

1. result标签-name属性 代表Action的返回值:Struts2框架内置的5个返回值
SUCCESS:Action正确执行,返回给响应视图
NONE:Action正确执行,不返回任何视图
FAILURE:Action执行失败,返回处理错误结果的视图。
LOGIN:Action因为没有登录而执行失败,返回登录视图
INPUT :Action执行需要从前端页面获取参数,但是对这些参数的验证不通过( 1.参数类型转换错误(在age等)2.某些input值不能为空等),将自动返回该视图

上面的意思是:如果Action中的某个方法返回的是SUCCESS,将对应配置文件中<result name="success"> ,至于配置文件中<result name="success"> 对应哪个视图,就由程序员说了算了。

public class LoginAction {    // 处理登录请求    public String login() {        // 如果用户名是amdin密码是123,用户登录成功             return SUCCESS;    }}
<struts>    <package name="users" namespace="/" extends="struts-default">        <action name="*_*" class="action.{1}Action" method="{2}">            <result name="success">/users/users_login_success.jsp</result>              </action>    </package></struts>

处理结果类型INPUT比较特殊 Action会自动返回 INPUT

情况一:参数类型转换错误。如果表单的参数中含有整形变量,但是表单中提交的是字符串,这时Action会自动返回INPUT. 并不会返回Action自定义的返回值。

    <form action="login.action" method="post">        <div>            用户名:<input type="text" name="username"></input>        </div>        <div>            年龄:<input type="text" name="age"></input>        </div>        <div>            <input type="submit" value="登录" />        </div>    </form>
public class LoginAction {    private String username;    private Integer age;    // 处理登录请求    public String login() {        if ("admin".equals(username) ) {            session.put("loginInfo", username);            return SUCCESS;        } else {            session.put("loginError", "用户名或密码错误");            return ERROR;        }    }}

情况二:校验结果 this.addFieldError(“username”, “用户名不能为空”);中有数据
如果校验的 代码写在自定义方法中,要显示定义 返回INPUT

    public String login() {        if (username == null || "".equals(username)) {            this.addFieldError("username", "用户名不能为空");            return INPUT;        }        if ("admin".equals(username) && "123".equals(password)) {            session.put("loginInfo", username);            return SUCCESS;        } else {            session.put("loginError", "用户名或密码错误");            return ERROR;        }    }

情况三:校验代码写在validate()方法中 并且校验结果 this.addFieldError(“username”, “用户名不能为空”);中有数据 会自动返回INPUT

@Overridepublic void validate() {    if (username == null || "".equals(username)) {        this.addFieldError("username", "用户名不能为空");    }}

2. result标签的type属性 代表处理结果的类型

<action name="author">    <result name="success" type="">/users/success.jsp</result></action>

struts2支持多种视图技术:JSP, Valocity,FreeMarker等

result中的type类型,type属性值代表的是支持的视图类型

type的默认值是dispatcher 支持jsp视图技术
属性值:chain:将action和另外一个action链接起来。
属性值:redirect:重定向(会丢失请求参数)。
属性值:plaintext:返回网页源代码。
属性值:stream:返回inputstream用于文件下载。

3. result标签的子标签

<action name="author">    <result name="success">        <!-- location属性 定义了该视图赌赢的实际视图资源 -->        <param name="location">/users/success.jsp</param>        <!-- parse属性 执行是否可以在实际视图名字中使用OGNL表达式,默认可以 -->        <param name="parse">false</param>    </result></action>

4. Action的返回结果有两种类型:局部结果和全局结果。

局部结果:每个Action中的结果 局部结果把<result>标签配置在<action>标签中

全局结果:所有Action共用的结果 全局结果把<result>标签配置在<global-results>标签中

<struts>    <package name="pack001" extends="struts-default">        <!-- 如果是404错误 -->        <global-results>            <result name="ERROR404">/note.jsp</result>        </global-results>    </package></struts>
阅读全文
0 0
原创粉丝点击