struts2 常见问题

 

计应134  郭宏钰

可以有多个包,每个包有一个命名空间

一个包里有多个action,一个action里有多个result
访问action时先以命名空间查找

.action
不带类名与包名 逐层访问路径 默认 result success 继承extends="struts-default"(为什么呢,后面拦截器会有说明)
包名 命名空间 寻找顺序(最精确匹配)
先找命名空间,如果在该命名空间不存在该action则报错[unknown location]
,当命名空间存在该action时,则可以在该命名空间下后面紧跟其它路径逐层访问 当逐层访问路径与有命名空间冲突时,以有命名空间的为主。

<jsp:forward 问题 struts2 jsp:forward 404错误
原因: struts 2 使用 filter 实现, <jsp:forword /> 的机制是 servlet
目前解决办法是:
1、用form表单提交
2、<meta http-equiv="refresh" content="0;URL=xxx.action">;
3、<script language="javascript">location.replace(URL)</script>
4、通过过滤器改变请求地址。
配置web.xml
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern >/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>

5、可以用s:url标签


类名
实现Action与不实现action接口
不extends ActionSupport 重写execute方法
extends ActionSupport 重写execute方法
?传值注意 method=post
表单提交 用 method=post

struts2 中 Actionsupport 的作用
(1)实现Action接口 具备5个常量
(2)数据校验,Action接口的基础上还定义了一个validate()方法
(3)国际化
(4)

Action 跟 Actionsupport 的区别
当我们在写action的时候,可以实现Action接口,也可以继承Actionsupport这个类.到底这两个有什么区别呢?
Action接口有:
public static final java.lang.String SUCCESS = "success";
public static final java.lang.String NONE = "none";
public static final java.lang.String ERROR = "error";
public static final java.lang.String INPUT = "input";
public static final java.lang.String LOGIN = "login";
public abstract java.lang.String execute() throws java.lang.Exception;
而Actionsupport这个工具类在实现了Action接口的基础上还定义了一个validate()方法,
重写该方法,它会在execute()方法之前执行,如校验失败,会转入input处,必须在配置该Action时配置input属性。
另外,Actionsupport还提供了一个getText(String key)方法还实现国际化,该方法从资源文件上获取国际化信息.

这样在自定义标签时可以定义一个变量为new actionsupport对象实现国际化。
ActionSupport类的作用
struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,
但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,
并重写此类里的public String execute() throws Exception 方法。因为此类中实现了很多的实用接口,提供了很多默认方法,
这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。
Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法。


开发模式的常量设置:将<constant name="struts.devMode" value="false" />中的value值改为true。

posted @ 2015-06-11 20:33  G.data  阅读(74)  评论(0)    收藏  举报