您的位置:首页 > 编程语言 > Java开发

[Java Web]Struts2基础总结(二)

2014-10-05 18:10 225 查看
Action接收参数的四种方法

在Action中定义属性和get、set方法,Struts2将会自动把接受的参数赋值到对应的属性:
public class UserAction extends ActionSupport {

private String name;
private int age;

public String execute() {<span style="white-space:pre">	</span>//localhost:8080/Struts/user?name=aaa&age=20
return SUCCESS;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}


在Action类中定义model对象并添加get、set方法,在model对象中定义属性添加get、set方法,Struts2会将属性传入model中:
public class UserAction extends ActionSupport {

private User user;

public String execute() {<span style="white-space:pre">	</span>//localhost:8080/Struts/user?user.name=a&user.age=19
return SUCCESS;
}

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

}

class User {
private String name;
private int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}


使用DTO进行中间过渡,用于参数中带有不需要存入model的属性时:
public class UserAction extends ActionSupport {

private UserDTO user;

public String execute() {	//localhost:8080/Struts/user?user.username=a&user.password=b&user.confirmingPassword=b
return SUCCESS;
}

public User getUser() {
return user;
}

public void setUser(UserDTO user) {
this.user = user;
}

}

class UserDTO {
private String username;
private String password;
private String confirmingPassword;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getConfirmingPassword() {
return confirmingPassword;
}

public void setConfirmingPassword(String confirmingPassword) {
this.confirmingPassword = confirmingPassword;
}
}


实现ModelDriven接口,自行创建成员对象实例,实现getModel方法:
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;
}

}

class User {
private String name;
private int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}


获取Request、Session和Application的四种方法:

使用ActionContext获取:
public class TestAction extends ActionSupport {

private Map request;
private Map session;
private Map application;

public TestAction() {
request = (Map)ActionContext.getContext().get("request");
session = ActionContext.getContext().getSession();
application = ActionContext.getContext().getApplication();
}

public String execute() {
request.put("username", "aaa");
session.put("password", "bbb");
application.put("name", "ccc");
return SUCCESS;
}

}


实现RequestAware、SessionAware、ApplicationAware接口,通过IOC注入获取:
public class TestAction extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {

private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;

public String execute() {
request.put("username", "aaa");
session.put("password", "bbb");
application.put("name", "ccc");
return SUCCESS;
}

@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}

@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}

@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}

}


通过ServletActionContext获取:
public class TestAction extends ActionSupport {

private HttpServletRequest request;
private HttpSession session;
private ServletContext application;

public TestAction() {
request = ServletActionContext.getRequest();
session = request.getSession();
application = session.getServletContext();
}

public String execute() {
request.setAttribute("username", "aaa");
session.setAttribute("password", "bbb");
application.setAttribute("name", "ccc");
return SUCCESS;
}
}


实现HttpRequestAware接口,通过IOC注入获取:
public class TestAction extends ActionSupport implements ServletRequestAware {

private HttpServletRequest request;
private HttpSession session;
private ServletContext application;

public String execute() {
request.setAttribute("username", "aaa");
session.setAttribute("password", "bbb");
application.setAttribute("name", "ccc");
return SUCCESS;
}

@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = request.getSession();
this.application = session.getServletContext();
}

}


Result

Result标签有两个属性type和name,其中type有4种常用选项,分别为:

dispatcher(默认选项):转发到一个页面
redirect:重定向到一个页面

chain:转发到一个Action

redirectAction :重定向到一个Action

有些页面可以为所有Action服务,例如主页、错误页面等,可以使用<global-results>标签将这些页面的Result设置成全局Result:

<global-results>
<result name="error">/error.jsp</result>
<result name="main">/index.jsp</result>
</global-results>


同时Result也支持动态结果集,用法为"${r}",r代表ValueStack中的一个属性名。例如Action为:
public class UserAction extends ActionSupport {
private int type;
private String url;

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public int getType() {
return type;
}

public void setType(int type) {
this.type = type;
}

@Override
public String execute() throws Exception {
if(type == 1) url="/success.jsp";
else if (type == 2) url="/error.jsp";
return "success";
}

}
struts.xml中的配置为:
<pre name="code" class="java"><action name="user" class="struts.action.UserAction">
<span style="white-space:pre">	</span><result>${url}</result>
</action>


或者用于重定向传递参数:
<action name="user" class="struts.action.UserAction">
<result type="redirect">/user.jsp/type=${type}</result>
</action>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: