Struts学习(五):对POJO对象访问的支持

Struts2.0里面有一个非常牛*的功能就是支持更高级的POJO访问,这句话是什么意思呢?下面来通过例子实际操作一把就能体会到这个功能的强大与好使了。

要实现的功能:如果用户输入用户名xiaozu,密码111111,则显示welcomexiaozhu!否则提示用户名或密码错误。

下面是我们所需的文件:

登陆页面login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W 3C //DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>登陆页面</title>

</head>

<body>

<s:form action="/test/loginAction.action" method="post">

    <s:textfield name="userName" label="用户名"/>

    <s:password name="password" label="密码"/>

    <s:submit/>

</s:form>

</body>

</html>

请求处理LoginAction.java

package tutorial;

 

import com.opensymphony.xwork2.ActionSupport;

 

public class LoginAction extends ActionSupport {

    private String msg="显示默认消息";

    private String userName;

    private String password;

   

    public String getPassword() {

       return password;

    }

 

    public void setPassword(String password) {

       this.password = password;

    }

 

    public String getUserName() {

       return userName;

    }

 

    public void setUserName(String userName) {

       this.userName = userName;

    }

    public String getMsg() {

       return msg;

    }

    public String execute(){

    if ("xiaozhu".equals(userName)&&"111111".equals(password)) {

        msg="welcome,"+userName;

       } else {

            msg="用户名或密码错误";

       }

    return this.SUCCESS;

    }

}

响应页面HelloWorld.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W 3C //DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

    <head>

        <title>Hello</title>

    </head>

    <body>

        <h3><s:property value="msg"/></h3>

    </body>

</html>

如上所示,对于login.jsp表单中的每个值域我们都会在相应的action中声明一个对应的属性并产生相应的getset方法,如果这个表单中的值很多(例如注册用户信息的表单),就会导致action十分庞大和容易混乱,并且也不利于我们的软件分层,违背了OO的原则,下面看一下改进后的方案。

 

登陆页面login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W 3C //DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Insert title here</title>

</head>

<body>

<s:form action="/test/loginAction.action" method="post">

    <s:textfield name="user.userName" label="用户名"/>

    <s:password name="user.password" label="密码"/>

    <s:submit/>

</s:form>

</body>

</html>

新增实体类User.java

package tutorial;

 

public class User {

    private String userName;

    private String password;

   

    public String getPassword() {

       return password;

    }

    public void setPassword(String password) {

       this.password = password;

    }

    public String getUserName() {

       return userName;

    }

    public void setUserName(String userName) {

       this.userName = userName;

    }

}

请求处理LoginAction.java

package tutorial;

 

import com.opensymphony.xwork2.ActionSupport;

 

public class LoginAction extends ActionSupport {

    private String msg="显示默认消息";

    private User user;

   

    public User getUser() {

       return user;

    }

    public void setUser(User user) {

       this.user = user;

    }

    public String getMsg() {

       return msg;

    }

 

    public String execute(){

if("xiaozhu".equals(user.getUserName())&&"111111".equals(user.getPassword()))

        msg="welcome,"+user.getUserName();

    else

        msg="用户名或密码错误";

    return this.SUCCESS;//

    }

}

响应页面HelloWorld.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W 3C //DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

    <head>

        <title>Hello</title>

    </head>

    <body>

        <h3><s:property value="msg"/></h3>

    </body>

</html>

前后两种处理方式有何不同呢?后者新建了一个User实体类,用于封装从表单中接收的数据,而在action中就不用设置相应的属性和方法了,并且这样做能够让我们的软件层次感更加明显,系统结构也更加清晰。以User为例,描述一下采用这种方式的关键步骤:

1.  action中定义一个User类型的对象:User user

2.  表单中各个控件的name属性要采取如下命名规则:对象名.属性名,注意对象名必须与action中定义的一样,属性名也必须和该对象的属性一一对应。如上例中的user.userNameuser.password

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值