IT Research Department @BKAP 2015 Page 5 / 21 Code thực hiện nghiệp vụ cho DisplayAction.java public class DisplayAction extends ActionSupport { //Khai bao hung du lieu userName tren
Trang 1IT Research Department @BKAP 2015 Page 1 / 21
Lab 02 Working with Struts 2 Framework Mục tiêu
- Hiểu rõ kiến trúc, thành phần, vòng đời của Struts 2 Framework
- Nắm vững luồng dữ liệu đi trong Struts 2 Framework
- Tạo ứng dụng đơn giản với Struts 2 Framework
- Thao tác Struts 2 Framework với Database
Phần I Bài tập step by step
Bài 2.1 Import các Plugins để sử dụng Struts 2 Framework:
- org-netbeans-modules-framework-xwork.nbm
- org-netbeans-modules-web-frameworks-struts2.nbm
- org-netbeans-modules-web-frameworks-struts2lib-v2_3_15.nbm
Tạo project với Struts 2 Framework trên Netbeans
- Nhập vào tên người dùng
- Hiển thị: “Xin chào người dùng”
Step 1: Tạo project mới trong Netbeans giống như bài lab01
Project Name: Lab02
Server: GlassFish Server
Frameworks: Struts 2
Trang 2 Trong đó:
1: Chọn Framework Struts 2
3: Finish
Cấu trúc ứng dụng sau khi hoàn thành
Step 2: Tạo trang các trang view jsp
input.jsp chứa textbox nhập vào tên người dùng
Trang 3IT Research Department @BKAP 2015 Page 3 / 21
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
< s:form action="Display">
< s:textfield label="User Name" name="userName"></s:textfield>
< s:submit value="Submit"/>
</ s:form>
</body>
</html>
output.jsp hiển thị “Xin chào người dùng”
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
Step 3: Tạo Action hứng dữ liệu trên form input.jsp và thực hiện nghiệp vụ xử lý dữ liệu và
trả ra kết quả cho struts.xml
Lab02 Source Packages New Other Struts 2 ActionSupport based Action
Trang 4 Trong đó
1: Tên Action
2: Package chứa Action
3: Finish
Trang 5IT Research Department @BKAP 2015 Page 5 / 21
Code thực hiện nghiệp vụ cho DisplayAction.java
public class DisplayAction extends ActionSupport {
//Khai bao hung du lieu userName tren form input.jsp
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
Struts 2 tự động nhận giá trị và chuyển đổi kiểu dữ liệu từ view xuống action
Ví dụ trên trang input.jsp ta có khai báo 1 textbox có name là userName, ở action ta
có 1 thuộc tính cũng là userName Struts 2 sẽ tự động nhận và chuyển đổi kiểu dữ liệu của giá trị nhập vào textbox userName trên input.jsp xuống thuộc tính
userName trên action
Trang 6Step 4: Cấu hình file struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<! Configuration for the default package >
<package name="default" extends="struts-default">
<action name="Display" class="action.DisplayAction">
<result name="success">output.jsp</result>
</action>
</package>
</struts>
Các thuộc tính cấu hình trong file struts.xml
Thẻ action: Chứa các thông tin về action
Name: Tên Action thực hiện (Có phân biệt hoa thường)
Class: Đường dẫn lớp action
Method: Phương thức action sẽ thực hiện (Bài 2.2 sẽ thực hiện)
Thẻ Result: Điều hướng chuyển trang dựa trên kết quả trả về từ action
Name: giá trị String trả về từ action
Step 5: Cấu hình web.xml
Trang 7IT Research Department @BKAP 2015 Page 7 / 21
Trang 8 GetAllCatalog
InsertCatalog
UpdateCatalog
Trang 9IT Research Department @BKAP 2015 Page 9 / 21
executeResult=”true” trong thẻ action
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %> %>
Trang 10 listCatalog.jsp: file hiển thị danh sách các loại sản phẩm sau khi thực hiện lấy tất cả
dữ liệu loại sản phẩm từ Database về File này sẽ được đưa vào phần body của file index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<td><s:property value="catalogId"/></td>
<td><s:property value="catalogName"/></td>
<td><s:property value="description"/></td>
<td><a href="initUpdate?catalogId=<s:property value="catalogId"/>">Update</a>
<a href="initDelete?catalogId=<s:property value="catalogId"/>">Delete</a></td>
</tr>
</ s:iterator>
</tbody>
</table>
<h3><a href="insertCatalog.jsp"> Add </a></h3>
Lưu ý : thẻ <a href= "initUpdate?catalogId= < s:property value = "catalogId" /> " >
Update </a> sẽ set vào request một parameter có tên là catalogId có giá trị là
<s:property value=”catalogId”/> và khi click vào link Update nó sẽ gọi action
initUpdate được khai báo trong struts.xml Trong lớp action ta sẽ lấy parameter này bằng cách get từ HttpServletRequest được implement từ interface
ServletRequestAware (Sẽ trình bày thêm bên dưới)
insertCatalog.jsp: file jsp chứa form nhập dữ liệu thông tin đối tượng catalog
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
< s:form action="InsertCatalog">
< s:textfield label="Catalog Name" name="insertCatalog.catalogName"/>
Trang 11IT Research Department @BKAP 2015 Page 11 / 21
< s:textarea label="Description" name="insertCatalog.description"/>
< s:submit value="Insert"/>
</ s:form>
</body>
</html>
updateCatalog.jsp: file jsp chứa form cập nhật thông tin đối tượng catalog
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
< s:form action="UpdateCatalog">
< s:textfield label="Catalog ID" name="updateCatalog.catalogId" value="%{initCatalog.catalogId}"
readonly="true"/>
< s:textfield label="Catalog Name" name="updateCatalog.catalogName"
value="%{initCatalog.catalogName}"/>
< s:textarea label="Description" name="updateCatalog.description" value="%{initCatalog.description}"/>
< s:submit value="Update"/>
error.jsp: file jsp thông báo lỗi trong quá trình xử lý
<%@page contentType="text/html" pageEncoding="UTF-8"%>
Trang 12 Lab02_CRUD Source Packages RC New Other Java Java Class
Đặt tên ConnectionDB và nằm trong package util
public class ConnectionDB {
private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=Struts2DB";
private static final String DB_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String user_db = "sa";
private static final String pass_db = "Gacon1984";
public static Connection getDBConnection() {
Connection conn = null;
conn = DriverManager.getConnection( URL, user_db, pass_db);
} catch (SQLException ex) {
ex.printStackTrace();
}
return conn;
}
Step 6: Tạo đối tượng Catalog (Lớp catalog.java)
Lab02_CRUD Source Packages RC New Other Java Java Class
Đặt tên catalog và nằm trong package entities
public class Catalog {
private int catalogId;
private String catalogName;
private String description;
public int getCatalogId() {
return catalogId;
}
Trang 13IT Research Department @BKAP 2015 Page 13 / 21
public void setCatalogId(int catalogId) {
this.catalogId = catalogId;
}
public String getCatalogName() {
return catalogName;
}
public void setCatalogName(String catalogName) {
this.catalogName = catalogName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
Step 7: Tạo lớp action Struts2
Lab02_CRUD Source Packages RC New Other Struts2 ActionSupport based Action
Đặt tên CatalogAction trong package bkap.action
package bkap.action;
import static com.opensymphony.xwork2.Action.ERROR;
import static com.opensymphony.xwork2.Action.SUCCESS;
Trang 14//Khai bao doi tuong catalog chua du lieu loai san pham insert
private Catalog insertCatalog;
//Khai bao doi tuong catalog chua du lieu loai san pham lay ra tren danh sach de update
private Catalog initCatalog;
//Khai bao doi tuong catalog chua du lieu loai san pham update
private Catalog updateCatalog;
//Khai bao danh sach doi tuong loai san pham chua du lieu khi lay tu database ve
private List<Catalog> listCatalog;
//Khai bao request trong khi xu ly cac yeu cau
private HttpServletRequest request;
//Khoi tao cac doi tuong
public CatalogAction() {
insertCatalog = new Catalog();
initCatalog = new Catalog();
updateCatalog = new Catalog();
listCatalog = new ArrayList<>();
}
public Catalog getInsertCatalog() {
return insertCatalog;
}
//Getter and setter cac thuoc tinh
public void setInsertCatalog(Catalog insertCatalog) {
this.insertCatalog = insertCatalog;
}
public Catalog getInitCatalog() {
return initCatalog;
}
public void setInitCatalog(Catalog initCatalog) {
this.initCatalog = initCatalog;
}
public Catalog getUpdateCatalog() {
return updateCatalog;
}
public void setUpdateCatalog(Catalog updateCatalog) {
this.updateCatalog = updateCatalog;
}
public List<Catalog> getListCatalog() {
return listCatalog;
}
public void setListCatalog(List<Catalog> listCatalog) {
this.listCatalog = listCatalog;
}
public HttpServletRequest getRequest() {
return request;
}
Trang 15IT Research Department @BKAP 2015 Page 15 / 21
public void setRequest(HttpServletRequest request) {
this.request = request;
Connection conn = null;
CallableStatement callableStatement = null;
try {
//Tao Connection
conn = ConnectionDB.getDBConnection();
//Goi Procedure
callableStatement = conn.prepareCall("{call GetAllCatalog()}");
//Lay du lieu ve ResultSet
ResultSet rs = callableStatement.executeQuery();
while (rs.next()) {
//Day du lieu vao listCatalog
Catalog catalog = new Catalog();
} catch (SQLException ex) {
Logger.getLogger(CatalogAction.class.getName()).log(Level SEVERE, null, ex);
public String insertCatalog() {
Connection conn = null;
CallableStatement callableStatement = null;
try {
//Tao connection voi Database
conn = ConnectionDB.getDBConnection();
//Set cac gia tri dau vao cua procedure
callableStatement = conn.prepareCall("{call InsertCatalog(?,?)}");
callableStatement.setString(1, this.insertCatalog.getCatalogName());
callableStatement.setString(2, this.insertCatalog.getDescription());
Trang 16//Thuc thi Insert Catalog vao database
} catch (SQLException ex) {
Logger.getLogger(CatalogAction.class.getName()).log(Level SEVERE, null, ex);
//Lay doi tuong can update
public String initUpdate() {
//Lay Catalog ID cua loai san pham can update
int catalogId = Integer.parseInt(request.getParameter("catalogId"));
//Lay Catalog theo CatalogId tu Database
//Connect Database
Connection conn = null;
CallableStatement callableStatement = null;
try {
//Tao Connection
conn = ConnectionDB.getDBConnection();
//Goi Procedure
callableStatement = conn.prepareCall("{call GetCatalogById(?)}");
//Set cac gia tri dau vao cua procedure
callableStatement.setInt(1, catalogId);
//Lay du lieu ve ResultSet
ResultSet rs = callableStatement.executeQuery();
while (rs.next()) {
//Day du lieu vao initCatalog
initCatalog.setCatalogId(rs.getInt("CatalogId"));
initCatalog.setCatalogName(rs.getString("CatalogName"));
initCatalog.setDescription(rs.getString("Description"));
} catch (SQLException ex) {
Logger.getLogger(CatalogAction.class.getName()).log(Level SEVERE, null, ex);
Trang 17IT Research Department @BKAP 2015 Page 17 / 21
Connection conn = null;
CallableStatement callableStatement = null;
try {
//Tao connection voi Database
conn = ConnectionDB.getDBConnection();
//Set cac gia tri dau vao cua procedure
callableStatement = conn.prepareCall("{call UpdateCatalog(?,?,?)}");
callableStatement.setInt(1, this.updateCatalog.getCatalogId());
callableStatement.setString(2, this.updateCatalog.getCatalogName());
callableStatement.setString(3, this.updateCatalog.getDescription());
//Thuc thi Update Catalog vao database
} catch (SQLException ex) {
Logger.getLogger(CatalogAction.class.getName()).log(Level SEVERE, null, ex);
public String deleteCatalog() {
//Lay Catalog ID cua loai san pham can delete
int catalogId = Integer.parseInt(request.getParameter("catalogId"));
//Connect Database
Connection conn = null;
CallableStatement callableStatement = null;
try {
//Tao connection voi Database
conn = ConnectionDB.getDBConnection();
//Set cac gia tri dau vao cua procedure
callableStatement = conn.prepareCall("{call DeleteCatalog(?)}");
} catch (SQLException ex) {
Logger.getLogger(CatalogAction.class.getName()).log(Level SEVERE, null, ex);
Trang 18}
Lưu ý:
request
ServletRequestAware
Step 8: Cấu hình file struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<! Configuration for the default package >
<package name="default" extends="struts-default">
<action name="GetAllCatalog" class="bkap.action.CatalogAction" method="getAllCatalog">
<result name="success">listCatalog.jsp</result>
<result name="error">error.jsp</result>
</action>
<action name="InsertCatalog" class="bkap.action.CatalogAction" method="insertCatalog">
<result name="success" type="redirect">index.jsp</result>
<result name="error">error.jsp</result>
</action>
<action name="initUpdate" class="bkap.action.CatalogAction" method="initUpdate">
<result name="success">updateCatalog.jsp</result>
<result name="error">error.jsp</result>
</action>
<action name="UpdateCatalog" class="bkap.action.CatalogAction" method="updateCatalog">
<result name="success" type="redirect">index.jsp</result>
<result name="error">error.jsp</result>
</action>
<action name="initDelete" class="bkap.action.CatalogAction" method="deleteCatalog">
<result name="success" type="redirect">index.jsp</result>
<result name="error">error.jsp</result>
</action>
</package>
</struts>