《struts2接受输入参数的三种方式》

来源:互联网 发布:淘宝店铺有违规怎么办 编辑:程序博客网 时间:2024/05/17 13:42

struts2 接收输入参数的3种方式

在我们的生活中,有很多的网页都存在用户登陆界面,当我们在登陆界面上输入自己的用户名和密码后,这些数据都会传入后台,供后台来验证我们所输入的数据是否正确。那么问题来了,后台是怎么接到到我们在用户登陆界面上所输入的用户名和密码的呢??

今天刚好学习到了struts2接收参数的部分,因此就有了这篇博文。

struts2接收输入参数有3种方式,如下:

1、使用Action的属性接收参数

2、使用Domain Model接收参数

3、使用ModelDriven接收参数

下面就这接收参数的三种方式一一进行介绍。

第一种:使用Action的属性接收参数

在相应的Action类中设置与将要传进来的参数名一样的变量,并设置这些变量的getter/setter方法。那么在访问action的过程中,struts2会自动的为action中的属性变量设置为前台传来的值。

我们以一个登陆界面为例,登陆界面中有用户名和密码。

前台界面的文件login.jsp的代码内容如下:

主要是一个表单,表单格式如下:

<form action="loginAction.action" method="post">    用户:<input type="text" name="username">     密码:<input type="password" name="password">    <input type="submit" value="提交" >

Action类中的代码如下:

从下图的代码可以看到,Action类中有两个属性:username和password,这两个属性是与登陆界面的参数相对应的。也设置了get、set方法。

struts.xml文件中的内容如下:

带上面完成后,我们就可以打开浏览器,并输入:http://localhost:8080/HelloWorld/login.jsp,出现如下的登陆界面:

当我们在登陆界面上填上数据并点击提交后,数据就自动传入后台中了,并自动跳转并执行http://localhost:8080/HelloWorld/loginAction.action

这就是利用Action类的属性来接收外部参数。

第二种:使用Domain Model接收参数

Domain Model 就是采用域模型来接收参数。即将我们要接收的数据封装到一个对象中去,采用这种方式进行传递。

我们还是以上面的登陆例子来进行介绍。

由于登陆界面中的数据为:username和password;

因此,我们可以建立一个User类。内容如下:
User类中有username /password两个属性,并有这些属性的get、set方法。

Action类的内容如下:里面包括User 的一个引用。

并且一定要有User引用的get、set方法。

前台界面的代码也要有相应的改变,改变为画红色线所示

struts.xml文件的内容与第一种方式的一样,为方便看,这里再贴一次。

待这些完成之后,
我们就可以打开浏览器,并输入:http://localhost:8080/HelloWorld/login.jsp,出现如下的登陆界面:

当我们在登陆界面上填上数据并点击提交后,数据就自动传入后台中了,并自动跳转并执行http://localhost:8080/HelloWorld/loginAction.action

以上就是struts2接收参数的第二种方式。

第三种:使用ModelDriven接收参数

这种方式是我们比较推荐的一种方式,使用方法如下。

1、首先,Action类要实现ModelDriven.并重写getModel方法,

其中要注意的是,User对象必须实例化。

代码如下:

import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;public class LoginAction extends ActionSupport implements ModelDriven<User>{    private User user=new User();//必须要求实例化      public String login(){    System.out.println(user.getUsername()+", "+user.getPassword());    return SUCCESS;}    public User getModel() {                    return user;    }}

2、login.jsp中的表单代码如下:

<form action="loginAction.action" method="post">    用户名:<input type="text" name="username">    密码:<input type="password" name="password">    提交:<input type="submit" value="提交">  </form>

User类和struts.xml文件、web.xml文件与之前的一样。

这就是第三种方法:使用ModelDriven接受参数。

复杂的参数如何传递呢

上面的User类中只封装了String类型的username/password,如何User类中有一个List tels ;那么应该怎么来从前台传递参数给这个List呢?

现在我们为User类添加一个List,代码如下

public class User {private String username;private String password;private List<String> tels;public List<String> getTels() {    return tels;}public void setTels(List<String> tels) {    this.tels = tels;}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;}}

login.jsp中的表单信息如下:

<form action="loginAction.action" method="post">    用户名:<input type="text" name="username">    密码:<input type="password" name="password">    个人电话:<input type="text" name="tels[0]">      公司电话:<input type="text" name="tels[1]">    提交:<input type="submit" value="提交">  </form>

注意:个人电话:<input type="text" name="tels[0]"> 就是将个人电话的表单中的数据传入到后台并保存在List tels的第一个位置。

如果我们的User类中,有一个List userList;属性呢,那么这种情况该怎么样从前台获取到参数呢??

例如:User类的代码如下

public class User {private String username;private String password;private List<User> tels;//一个复杂的属性public List<User> getTels() {    return tels;}public void setTels(List<User> tels) {    this.tels = tels;}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;}}

而login.jsp中表单的内容如下:

<form action="loginAction.action" method="post">    用户名:<input type="text" name="username">    密码:<input type="password" name="password">    学生1:<input type="text" name="tels[0].username">  //就是将此表单的内容给User类中属性List<User>tels中第一个元素的username.    学生2:<input type="text" name="tels[1].username">    提交:<input type="submit" value="提交">  </form>

根据上面的两个复杂属性的例子,相信就了解了,如果我们想将前台的数据传给一个List,按照上面的步骤即可完成。

1 0
原创粉丝点击