Struts 2

Struts 2

August 6, 2020
Struts

Action 访问 Servlet API

使用 ActionContext 来访问 Servlet API。


Servlet API JSP 对象
HttpServletRequest request
HttpSession session
ServletContext application

操作 Session:

ActionContext.getContext().getSession().put("user", userName);

在 JSP 页面中可以通过

${sessionScope.user}

来输出userName

数据校验

ActionSupport 是一个工具类,已经实现了 Action 接口,实现了 Validatable 接口,提供数据校验功能。

@Override
public void validate() {
    if (getUserName() == null || getUserName().trim().equals("")) {
        addFieldError("username", getText("user.required"));
    }
}

struts.xml 配置文件

分为多个配置文件:

<struts>
    <include file="struts-part1.xml" />
</struts>

Struts 2 不支持为单独的 Action 设置命名空间,而是通过为包指定 namespace 属性来为包下面的所有 Action 指定共同的命名空间。

<package name="book" extends="struts-default" namespace="/book">

当指定了命名空间后,该包下所有的 Action 处理的 URL 应该是命名空间 + Action 名。

http://localhost:8888/namespace/book/getBooks.action

默认的命名空间是 "”

Action

Action 类是一个普通的 POJO 类,来封装 HTTP 请求参数,并为请求参数对应的属性封装对应的 settergetter 方法。

在 JSP 中输出:

<s:property value="tip">

不推荐在 <action name="xxx"> 的 name 属性中包含 .-,可能引发未知异常。


通过指定 <action method="login" /> 就可以让 Action 类调用指定方法,而非 execute 方法来处理用户请求。

name 属性支持通配符

<action name="*Pro" class="com.zk.LoginAction" method="{1}">

另外一个示例:

<action name="*_*" method="{2}" class="actions.{1}">

类型转换

Struts 2 内建类型转换器可以完成基本数据类型转换、Date 与字符串之间的转换。

<form method="post" action="regist">
    <input type="text" name="user.name" /><br />
    <input type="password" name="user.pass" />
</form>

对应的 User 类:

private User user;

User 类必须提供无参构造器

Map

private Map<String, User> users;

设置 map

读取 map

List

设置 List

读取 List

参考