Struts學習(五):對POJO對象訪問的支持

在Struts2.0裏面有一個非常牛*的功能就是支持更高級的POJO訪問,這句話是什麼意思呢?下面來通過例子實際操作一把就能體會到這個功能的強大與好使了。

要實現的功能:如果用戶輸入用戶名xiaozu,密碼111111,則顯示welcome,xiaozhu!否則提示用戶名或密碼錯誤。

下面是我們所需的文件:
登陸頁面login.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//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:
 

  1. package tutorial;  
  2. import com.opensymphony.xwork2.ActionSupport;  
  3.  
  4. public class LoginAction extends ActionSupport {  
  5.  
  6.     private String msg="顯示默認消息";  
  7.     private String userName;  
  8.     private String password;  
  9.  
  10.     public String getPassword() {  
  11.          return password;  
  12.     }  
  13.     public void setPassword(String password) {  
  14.        this.password = password;  
  15.     }  
  16.     public String getUserName() {  
  17.        return userName;  
  18.     }  
  19.     public void setUserName(String userName) {  
  20.        this.userName = userName;  
  21.     }  
  22.     public String getMsg() {  
  23.        return msg;  
  24.     }  
  25.     public String execute(){  
  26.     if ("xiaozhu".equals(userName)&&"111111".equals(password)) {  
  27.         msg="welcome,"+userName;  
  28.        } else {  
  29.             msg="用戶名或密碼錯誤";  
  30.        }  
  31.     return this.SUCCESS;  
  32.     }  
  33. }  

響應頁面HelloWorld.jsp:

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

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

<!DOCTYPE html PUBLIC "-//W3C//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 "-//W3C//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

  1. package tutorial;  
  2. public class User {  
  3.  
  4.     private String userName;  
  5.     private String password;  
  6.  
  7.     public String getPassword() {  
  8.        return password;  
  9.     }  
  10.     public void setPassword(String password) {  
  11.        this.password = password;  
  12.     }  
  13.     public String getUserName() {  
  14.        return userName;  
  15.     }  
  16.     public void setUserName(String userName) {  
  17.        this.userName = userName;  
  18.     }  

請求處理LoginAction.java

 

  1. package tutorial;  
  2. import com.opensymphony.xwork2.ActionSupport;  
  3. public class LoginAction extends ActionSupport {  
  4.  
  5.     private String msg="顯示默認消息";  
  6.     private User user;  
  7.     public User getUser() {  
  8.        return user;  
  9.     }  
  10.     public void setUser(User user) {  
  11.        this.user = user;  
  12.     }  
  13.     public String getMsg() {  
  14.        return msg;  
  15.     }  
  16.     public String execute(){  
  17.          if("xiaozhu".equals(user.getUserName())         &&"111111".equals(user.getPassword()))  
  18.  
  19.         msg="welcome,"+user.getUserName();  
  20.  
  21.     else  
  22.  
  23.         msg="用戶名或密碼錯誤";  
  24.  
  25.     return this.SUCCESS;//  
  26.  
  27.     }  
  28. }  

響應頁面HelloWorld.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//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.userName和user.password。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章