Struts Action 控制器

8次阅读

共计 5332 个字符,预计需要花费 14 分钟才能阅读完成。

控制器
即,mvc 模型的控制器模型, 用于接收数据, 传递给视图层, 和模型层默认使用 execute 方法
查看相关接口
查看 com.opensymphony.xwork2 下的 Action 接口文件如下
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* “License”); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.opensymphony.xwork2;

/**
* All actions <b>may</b> implement this interface, which exposes the <code>execute()</code> method.
* <p>
* However, as of XWork 1.1, this is <b>not</b> required and is only here to assist users. You are free to create POJOs
* that honor the same contract defined by this interface without actually implementing the interface.
* </p>
*/
public interface Action {

/**
* The action execution was successful. Show result
* view to the end user.
*/
public static final String SUCCESS = “success”;

/**
* The action execution was successful but do not
* show a view. This is useful for actions that are
* handling the view in another fashion like redirect.
*/
public static final String NONE = “none”;

/**
* The action execution was a failure.
* Show an error view, possibly asking the
* user to retry entering data.
*/
public static final String ERROR = “error”;

/**
* <p>
* The action execution require more input
* in order to succeed.
* This result is typically used if a form
* handling action has been executed so as
* to provide defaults for a form. The
* form associated with the handler should be
* shown to the end user.
* </p>
*
* <p>
* This result is also used if the given input
* params are invalid, meaning the user
* should try providing input again.
* </p>
*/
public static final String INPUT = “input”;

/**
* The action could not execute, since the
* user most was not logged in. The login view
* should be shown.
*/
public static final String LOGIN = “login”;

/**
* Where the logic of the action is executed.
*
* @return a string representing the logical result of the execution.
* See constants in this interface for a list of standard result values.
* @throws Exception thrown if a system level exception occurs.
* <b>Note:</b> Application level exceptions should be handled by returning
* an error value, such as <code>Action.ERROR</code>.
*/
public String execute() throws Exception;

}

大概翻译一下
*
 * 获得 Apache 软件基金会(ASF)的许可
 * 或更多贡献者许可协议。请参阅 NOTICE 文件
 * 与此工作一起分发以获取更多信息
 * 关于版权所有权。ASF 许可此文件
 * 根据 Apache 许可证 2.0 版(
 *“执照”); 除非符合规定,否则您不得使用此文件
 * 使用许可证。您可以在以下位置获取许可证副本
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * 除非适用法律要求或书面同意,
 * 根据许可证分发的软件分发在
 *“按原样”基础,不提供任何保证或条件
 * KIND,无论是明示的还是暗示的。请参阅许可证
 * 管理权限和限制的特定语言
 * 根据许可证。
 * /
package com.opensymphony.xwork2;

/ **
 * 所有动作 <b> 可能 </ b> 实现此接口,该接口公开 <code> execute()</ code> 方法。
 * <p>
 * 但是,从 XWork 1.1 开始,这 <b> 不 </ b> 是必需的,仅用于帮助用户。您可以自由创建 POJO
 * 遵守此接口定义的相同合同而不实际实现接口。
 * </ p>
 * /
public interface Action {

    / **
     * 行动执行成功。显示结果
     * 查看最终用户。
     * /
    public static final String SUCCESS =“success”;

    / **
     * 行动执行成功但没有
     * 显示一个视图。这对于有效的操作很有用
     * 以重定向等其他方式处理视图。
     * /
    public static final String NONE =“none”;

    / **
     * 行动执行失败。
     * 显示错误视图,可能会询问
     * 用户重试输入数据。
     * /
    public static final String ERROR =“error”;

    / **
     * <p>
     * 动作执行需要更多输入
     * 为了成功。
     * 此结果通常用于表格
     * 处理行动已经执行
     * 提供表单的默认值。该
     * 与处理程序关联的表单应该是
     * 向最终用户显示。
     * </ p>
     *
     * <p>
     * 如果给定输入,也会使用此结果
     * 参数无效,意味着用户
     * 应该尝试再次提供输入。
     * </ p>
     * /
    public static final String INPUT =“input”;

    / **
     * 行动无法执行,因为
     * 用户最多未登录。登录视图
     * 应该显示。
     * /
    public static final String LOGIN =“login”;

    / **
     * 执行动作的逻辑。
     *
     * @return 表示执行逻辑结果的字符串。
     * 有关标准结果值的列表,请参阅此界面中的常量。
     * @throws 如果发生系统级异常,则抛出异常。
     * <b> 注意:</ b> 应通过返回来处理应用程序级异常
     * 错误值,例如 <code> Action.ERROR </ code>。
     * /
    public String execute()抛出异常;

}
可以看到, 定义了几个常量一个接口, 其中默认执行 execute 方法, 其中几个常量为执行结果的常量
扩展实现 Action 接口的 ActionSupport 类
/**
* Provides a default implementation for the most common actions.
* See the documentation for all the interfaces this class implements for more detailed information.
*/
public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable
大概翻译一下
* 为最常见的操作提供默认实现。
  * 有关更多详细信息,请参阅此类实现的所有接口的文档。
 */
所以直接扩展该类即可
重新扩展 HelloWorldAction
package com.ming;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {
private String name;

@Override
public String execute() throws Exception {
return “success”;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

可以在 execute 中书写业务逻辑重新更改如下
package com.ming;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {
private String name;

@Override
public String execute() throws Exception {
if(SUCCESS.equals(name)){
// 此时返回 SUCCESS
return SUCCESS;
}else{
// 其余内容返回 error
return ERROR;
}
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

在上方, 根据 name 的值, 完成了一个业务逻辑, 返回是 or 否
编写配置文件
<?xml version=”1.0″ encoding=”UTF-8″?>

<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.5//EN”
“http://struts.apache.org/dtds/struts-2.5.dtd”>

<struts>
<!– 定义调试 –>
<constant name=”struts.devMode” value=”true” />
<!– 定义数据包 –>
<package name=”helloworld” extends=”struts-default”>
<!– 定义处理逻辑 name 为指定处理的名称 class 处理的包文件 method 处理将会调用的方法 –>
<action name=”hello”
class=”com.ming.HelloWorldAction”
method=”execute”>
<!– 成功返回页面 –>
<result name=”success”>/HelloWorld.jsp</result>
<result name=”error”>/error.html</result>
</action>
</package>
</struts>
效果如下

正文完
 0