Action怎样接收参数
三种接收参数的方式
- Action中的属性名称和前端表单的名称相同(自动赋值)
Struts2是调用的方法赋值。
- DomainModelrParamInput (域模型),action接收到参数就是赋值到某个对象属性,存到数据库中
属性中存在一个Model(对象),加上set,get方法,也不需要new,struts2负责
输入一般是不是和域模型完全匹配,不匹配的时候(1.直接获取每个属性,再操作对象赋值;2.使用vo视图对象、do数据对象、dto数据传输对象;
- ModelDriverParamInput, Action implements ModelDriver<User>, User类型属性必须得new)
public User getModel() {
}
Struts2主要是MVC中的C
中文乱码问题
如果有中文,尽量用post
i18n->internationalization
搭配环境-》然后写小程序,一个小程序测试一个知识点。
配置这个struts.i18n.encoding=UTF-8(好像有bug)
数据校验
读源码(顺着一条线往下读),不是读懂所有的jsp再读java
努力很重要但是方法也很重要。UserAction没有和request和response绑定在一块。返回错误信息 this.addFieldError(“name”, “name is error”)
<s:fielderror fieldname=”name” thme=”simple”>
<s:property value=”errors.anme[0]” /> ->取Struts ValueStack
<s:debug></s:debug>可以看到struts ValueStack和stack context
Errors包括actionErrors(Action本身有问题),fieldError
比如errors为name=[name is err]
可以对同一个名字添加多个属性么?可以。
Struts2中通过某种机制访问到一些webElements(session、request、application),response不需要
第一种方式获取map类型的request、session、application;真实对象的HttpServletRequeset、HttpServletSession、HttpServletApplication
request=(Map)ActionContext.getContext().get(“request”);
session=ActionContext.getContext().getSession();
application=ActionContext.getContext().getApplication():
getContext()不是单例,是threadLocal
Context是指周围的环境(上下文,运行环境)
ServletContex是指Servlet的运行环境
ActionContext是指Action的运行环境
前台可以->
<s:property value=”#request.r1”/> ! <%=request.getAttribute(“r1”)%>
<s:property value=”#arrt.a1”/>
attr会搜request、session、application中搜索(尽量不用)
第二种方式
pubic class UserAction extends ActionSupport mplements RequestAware, SessionAware, ApplicationAware{
}
需要提供三个方法
@Override
Public void setRequest(Map<String, Object> request){
this.request=request
}
这块利用了
IOC(inverse of control)或者称为DI (dependency injection)依赖注入
JUDE(画图工具要会用)
第三种方式HTTP对象类型
request = ServletActionContext.getRequest();
session = request.getSession();
application= session.getServletContext();
第四种方式
implements ServletRequestAware(){
@Override
Public void setServletRequest(HttpServletRequest request) {
this.request=request;
this.session=request.getSession();
this.application= session.getServletContext();
}
}
Struts.xml中的<include file=”login.xml”>就是相当于把文件直接考过来
要做的穿一手鞋(自己原创,参考官方api文档)
好处就是模块化,一个有经验的项目经理会分模块,自己写自己的配置
在<package>标签中定义<default-action-ref name=””></default-action-ref>
请求的时候不写action和找不到的action都会跳转到默认的action
Action总结
DMI动态方法调用!(掉方法)
通配符*_*通配符配置{1}{2}
顺利上完本科,创造力就没了
必须等别人写完程序然后改这样没办法进步
转载请注明:学时网 » struts2视频教程听课笔记(二)