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

Struts2页面数据和Action数据三种基本对应方式

2014-01-13 10:38 218 查看
在Struts2中页面的数据和Action有两种基本对应方式,分别是:属性驱动和模型驱动。

其中属性驱动又分为:基本类型的属性对应和JavaBean风格的属性对应

一。属性驱动

1.基本类型的属性驱动。

在Action里面设置属性名称和jsp页面设置的属性名称一样就可以了,当然Action里面的属性要有getter、setter方法,或者直接把属性设置成public的(但是一般都不那么做)。

package com.action;

import com.opensymphony.xwork2.Action;

public class HelloWorldAction implements Action {

private String account;
private String password;
private String submitFlag;

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
if(account.equals("ironman")&&password.equals("123")){
return "toWelcome";
}else{
return "loginError";
}

}
//public 的 getter setter方法。。。
public String getAccount() {
return account;
}

public void setAccount(String account) {
this.account = account;
}

public String getPassword() {
return password;
}

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

public String getSubmitFlag() {
return submitFlag;
}

public void setSubmitFlag(String submitFlag) {
this.submitFlag = submitFlag;
}
}


jsp代码

<form action="helloworldAction" method="post">
<input type="hidden" name="submitFlag" value="login"/>
username:<input type="text" name="account"><br>
password:<input type="password" name="password"><br>
<input type="submit" value="submit"/>

</form>


可以看到那些属性名都是一样的。

2.JavaBean风格的属性对应。

首先写一个JavaBean将属性封装起来,并且提供public的setter和getter方法。

package com.bean;

public class HelloWorld {
private String account;
private String password;
private String submitFlag;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSubmitFlag() {
return submitFlag;
}
public void setSubmitFlag(String submitFlag) {
this.submitFlag = submitFlag;
}

}


我们现在来看Action的代码会发现少很多,内容也比较清晰,所以平常使用最多的也是这种方法。当然三种方法可以混合使用,但是要避免冲突。

package com.action;

import com.bean.HelloWorld;
import com.opensymphony.xwork2.Action;

public class HelloWorldAction implements Action{

private HelloWorld hello = new HelloWorld();

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
if(hello.getAccount().equals("ironman")&&hello.getPassword().equals("123")){
return "toWelcome";
}else{
return "loginError";
}
}

public HelloWorld getHello() {
return hello;
}

public void setHello(HelloWorld hello) {
this.hello = hello;
}

}


再来看看jsp中的代码,会有一些不一样。

<form action="helloworldAction" method="post">
<input type="hidden" name="hello.submitFlag" value="login"/>
username:<input type="text" name="hello.account"><br>
password:<input type="password" name="hello.password"><br>
<input type="submit" value="submit"/>

</form>


我们看到,在属性前面要加上了那个对象的名字。

二。使用模型驱动。

他的基本实现方式是让Action实现一个ModelDriven接口,这个接口需要我们实现个getModel的方法,这个方法返回的就是Action所使用的数据模型对象。

主要是在Action里面有变化,只是添加了ModelDriven的实现,另外去掉了对应的getter/setter方法,其他的都没有什么变化。

package com.action;

import com.bean.HelloWorld;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;

public class HelloWorldAction implements Action , ModelDriven{

private HelloWorld hello = new HelloWorld();

@Override
public Object getModel() {
// TODO Auto-generated method stub
return hello;
}

@Override
public String execute() throws Exception  {
// TODO Auto-generated method stub
if(hello.getAccount().equals("ironman")&&hello.getPassword().equals("123")){
return "toWelcome";
}else{
return "loginError";
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: