参考视频:尚学堂
接收参数有中文怎么办
尽量用post
struts.xml中:
<constant name="struts.i18n.encoding" value="GBK" /> <!-- internationalization -->
如果写了这个还是不可以,说明你的版本低,这是个系统bug,struts2 中2.1.7会修正这个问题
也可以:
在web.xml 中 的原来的filter改成旧的filter
旧的:
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
但是旧的也有问题,这里就不说这个两难问题了,将来可以用spring解决,这里还可以用新的,等着以后修改这个bug
新的是:
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
简单的数据校验
方式很多,先讲最简单的
struts.xml里:
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
<result name="error">/user_add_error.jsp</result>
</action>
</package>
action里:
public String add() {
if(name == null || !name.equals("admin")) {
this.addFieldError("name", "name is error");
this.addFieldError("name", "name is too long");
return ERROR;
}
return SUCCESS;
}
jsp里:
<%@taglib uri="/struts-tags" prefix="s" %>
<body>
User Add Error!
<s:fielderror fieldName="name" theme="simple"/>
<br />
<s:property value="errors.name[0]"/>
<s:debug></s:debug>
</body>
页面–后台–处理
struts2向前台传错误信息:this.addFieldError(“”,);
前台展现:<s:fielderror fieldName = "" theme=""/>
<s:property value = "" />
<s:debug ></s:debug>
debug 会显示 值栈
s:property 常用
表示请你把给我取属性展现在这里,value stack和stack context都能取。value stack里的值直接写名字就能取到。
访问web元素
取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用:
- 前三者:依赖于容器
- 前三者:IOC
- (只用这种)
- 后三者:依赖于容器
- 后三者:IOC
- 在struts2中,struts会把前三的值挨个赋值给http前三里
.attr 很少用,会挨个搜,不精确
actionContext.getContext 不是单例,是个线程里的
1.自己获取actionContext.getContext
2.IOC 实现三个接口
IoC 控制反转 inverse of control 本来是自己控制,自己new或者去拿,现在依靠别人(容器)
DI 依赖注入 dependency injection 依赖别人给
3.固定写法 基本不用
4.依赖注入 实现一个接口
模块包含
struts.xml里:
include 可以把另一个xml包含在里面
<include file = “login.xml”/>
意义:分模块配置
默认action
struts.xml:
<default-action-ref name = '‘ ’'></default-action-ref>
找不到某些action的时候默认找这个
action总结
1.实现action最常用方式:继承ActionSupport
2.DMI动态方法调用
3.通配符配置 {1}{2} *_ (下划线不是必须的 ,自己多试一试)
4.接收参数的方法:一般用属性或者DomainModel来接收
5.简单参数验证 addFieldError,一般不使用struts2的UI标签
6.访问web元素
Map类型:IOC 依赖Struts2
原始类型:IOC 依赖struts2
7.包含文件配置:include
8.默认action处理:default