上篇文章写了jsp页面或者html页面怎么通过url调用服务器端Action中的方法,那么web端和服务器端的数据应该怎么传递呢? 不知道大家是否记得在Servlet中是如何实现前段和后端的交互的,那里面是通过往request中设置参数,然后转发到页面上。在页面通过JSTL或者jsp代码接受,显示。 在struts2里面其实更加简单,只需要在Action中设置好一个属性的getter和setter方法即可。 这里做两个实验,通过两种不同的方式传递数据。不过有一点需要清楚,无论struts2是怎么做到不需要开发者操作request,但其本质依然是对request或者httprequest的操作。
实验一:传递值属性
一、Test1Action:
package com.action;
import com.opensymphony.xwork2.ActionSupport;
public class Test1Action extends ActionSupport {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String execute() throws Exception {
return super.execute();
}
}
二、 struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true"></constant>
<package name="front" namespace="/" extends="struts-default">
<action name="test*" class="com.action.Test{1}Action">
<result>/test{1}.jsp</result>
</action>
</package>
</struts>
三、 jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'test.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
得到的数据是:<%=request.getAttribute("username") %>
</body>
</html>
我直接在url中输入:
http://localhost:8088/struts2_test/test1?username=huyang
得到结果如下:
<hr/>
实验二,传递对象 一、 Test2Action.java:
package com.action;
import com.domain.User;
import com.opensymphony.xwork2.ActionSupport;
public class Test2Action extends ActionSupport {
private User user;
@Override
public String execute() throws Exception {
return super.execute();
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
User.java:
package com.domain;
public class User {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
配置文件不用改,test2.jsp页面:
<body>
得到的数据是:<%=request.getAttribute("User.username") %>
</body>
在浏览器输入url:
http://localhost:8088/struts2_test/test2?user.username=huyang
效果同上
那么如果我在User类中引用了另外一个类作为属性怎么传值呢?根据上例可知应该是User.[Class].username
其实在页面上可以使用Struts标签轻松的获取服务器发过来的数据,这样就可以完全不用考虑request了,但是其原理你要清楚的。