链接调用
调用一个Action的function
//ActionName!FunctionName
href = "/ProjectName/UserActon!Login"
采用Get方式传输数据
//ActionName!FunctionName?arg1=hello&arg2=world
href= "/Project/UserLoginAction!Check?Uname=user&passwd=1234"
直接调用Bean中的数据
//Url调用
"/Project/UserLoginAction!Login?user.uname=abc"
//Action文件
{
private User user;
getUser{};
setUser{};
}
动态跳转
struts.xml
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>${r}</result>
</action>
Action
private String r;
//get/set
//r="/user_success.jsp"
ModelDriven传输
不怎么实用也不怎么常用
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
@Override
public User getModel() {
return user;
}
}
数据调用
取request、session、application
手动获取
不推荐使用
- 后台
//ActionContext.getContext()
Map request = (Map)ActionContext.getContext().get("request");
Map session = ActionContext.getContext().getSession();
Map application = ActionContext.getContext().getApplication();
- 前台
<s:property value="#request" />
利用预提供的接口
标准做法
- DI dependency injection 依赖注入
- inverse of control 控制反转
1. org.apache.struts2.interceptor.ApplicationAware; //很少用到
2. org.apache.struts2.interceptor.RequestAware; //很少用到
3. org.apache.struts2.interceptor.SessionAware; //常用
public class LoginAction2 extends ActionSupport implements SessionAware {
private Map<String, Object> session;
public String execute() {
session.put("r1", "r1");
return SUCCESS;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
}
获取serlet类
request = ServletActionContext.getRequest();
session = request.getSession();
application = session.getServletContext();
向前台链接传参
不写入值栈只写入url
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result type="redirect">/user_success.jsp?t=${type}</result>
</action>
前台
from valuestack 输出空值
<s:property value="t"/>
from actioncontext 输出值
<s:property value="#parameters.t"/>