Struts 2 - Chuyển đổi kiểu
Mọi thứ trên một yêu cầu HTTP được coi là Stringtheo giao thức. Điều này bao gồm số, boolean, số nguyên, ngày tháng, số thập phân và mọi thứ khác. Tuy nhiên, trong lớp Struts, bạn có thể có các thuộc tính của bất kỳ kiểu dữ liệu nào.
Làm thế nào để Struts tự động phân phối các thuộc tính cho bạn?
Struts sử dụng nhiều bộ chuyển đổi loại khác nhau dưới nắp để thực hiện việc nâng vật nặng.
Ví dụ: nếu bạn có thuộc tính số nguyên trong lớp Hành động của mình, Struts sẽ tự động chuyển đổi tham số yêu cầu thành thuộc tính số nguyên mà bạn không cần làm gì cả. Theo mặc định, Struts đi kèm với một số bộ chuyển đổi kiểu
Nếu bạn đang sử dụng bất kỳ bộ chuyển đổi nào được liệt kê bên dưới, thì bạn không có gì phải lo lắng về -
- Số nguyên, Pha nổi, Đôi, Thập phân
- Ngày và giờ
- Mảng và Bộ sưu tập
- Enumerations
- Boolean
- BigDecimal
Đôi khi bạn đang sử dụng kiểu dữ liệu của riêng mình, cần phải thêm các trình chuyển đổi của riêng bạn để giúp Struts biết cách chuyển đổi các giá trị đó trước khi hiển thị. Hãy xem xét lớp học POJO sauEnvironment.java.
package com.tutorialspoint.struts2;
public class Environment {
private String name;
public Environment(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Đây là một lớp rất đơn giản có một thuộc tính được gọi là name, vì vậy không có gì đặc biệt về lớp này. Hãy để chúng tôi tạo một lớp khác chứa thông tin về hệ thống -SystemDetails.java.
Với mục đích của bài tập này, tôi đã mã hóa Môi trường thành "Phát triển" và Hệ điều hành thành "Windows XP SP3".
Trong một dự án thời gian thực, bạn sẽ nhận được thông tin này từ cấu hình hệ thống.
Hãy để chúng tôi có lớp hành động sau:
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class SystemDetails extends ActionSupport {
private Environment environment = new Environment("Development");
private String operatingSystem = "Windows XP SP3";
public String execute() {
return SUCCESS;
}
public Environment getEnvironment() {
return environment;
}
public void setEnvironment(Environment environment) {
this.environment = environment;
}
public String getOperatingSystem() {
return operatingSystem;
}
public void setOperatingSystem(String operatingSystem) {
this.operatingSystem = operatingSystem;
}
}
Tiếp theo, hãy tạo một tệp JSP đơn giản System.jsp để hiển thị thông tin Môi trường và Hệ điều hành.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ 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>System Details</title>
</head>
<body>
Environment: <s:property value = "environment"/><br/>
Operating System:<s:property value = "operatingSystem"/>
</body>
</html>
Hãy để chúng tôi kết nối system.jsp và SystemDetails.java lớp học cùng nhau sử dụng struts.xml.
Lớp SystemDetails có một phương thức thực thi đơn giản () trả về chuỗi "SUCCESS".
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "system"
class = "com.tutorialspoint.struts2.SystemDetails"
method = "execute">
<result name = "success">/System.jsp</result>
</action>
</package>
</struts>
Nhấp chuột phải vào tên dự án và nhấp vào Export > WAR File để tạo tệp Chiến tranh.
Sau đó, triển khai WAR này trong thư mục ứng dụng web của Tomcat.
Cuối cùng, khởi động máy chủ Tomcat và cố gắng truy cập URL http://localhost:8080/HelloWorldStruts2/system.action. Điều này sẽ tạo ra màn hình sau:
Điều gì là sai với đầu ra ở trên? Struts biết cách hiển thị và chuyển đổi chuỗi "Windows XP SP3" và các kiểu dữ liệu cài sẵn khác, nhưng nó không biết phải làm gì với thuộc tính củaEnvironmentkiểu. Nó đơn giản được gọi làtoString() phương pháp trên lớp
Để giải quyết vấn đề này, bây giờ chúng ta hãy tạo và đăng ký một TypeConverter cho lớp Môi trường.
Tạo một lớp có tên EnvironmentConverter.java với những điều sau đây.
package com.tutorialspoint.struts2;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class EnvironmentConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class clazz) {
Environment env = new Environment(values[0]);
return env;
}
@Override
public String convertToString(Map context, Object value) {
Environment env = (Environment) value;
return env == null ? null : env.getName();
}
}
Các EnvironmentConverter mở rộng StrutsTypeConverter lớp và cho Struts biết cách chuyển đổi Môi trường thành Chuỗi và ngược lại bằng cách ghi đè hai phương thức là convertFromString() và convertToString().
Bây giờ chúng ta hãy đăng ký bộ chuyển đổi này trước khi chúng ta sử dụng nó trong ứng dụng của mình. Có hai cách để đăng ký một bộ chuyển đổi.
Nếu trình chuyển đổi chỉ được sử dụng trong một hành động cụ thể, thì bạn sẽ phải tạo một tệp thuộc tính cần được đặt tên là '[action-class]'converstion.properties.
Trong trường hợp của chúng tôi, chúng tôi tạo một tệp có tên SystemDetails-converstion.properties với mục đăng ký sau -
environment = com.tutorialspoint.struts2.EnvironmentConverter
Trong ví dụ trên, "môi trường" là tên của thuộc tính trong SystemDetails.java và chúng tôi đang yêu cầu Struts sử dụng EnvironmentConverter để chuyển đổi đến và từ tài sản này.
Tuy nhiên, chúng tôi sẽ không làm điều này, Thay vào đó, chúng tôi sẽ đăng ký bộ chuyển đổi này trên toàn cầu, để nó có thể được sử dụng trong toàn bộ ứng dụng. Để thực hiện việc này, hãy tạo một tệp thuộc tính có tênxwork-conversion.properties bên trong WEBINF/classes thư mục với dòng sau
com.tutorialspoint.struts2.Environment = \
com.tutorialspoint.struts2.EnvironmentConverter
Điều này chỉ đơn giản là đăng ký bộ chuyển đổi trên toàn cầu, do đó Strutscó thể tự động thực hiện chuyển đổi mỗi khi nó gặp một đối tượng thuộc loại Môi trường. Bây giờ, nếu bạn biên dịch lại và chạy lại chương trình, thì bạn sẽ nhận được kết quả tốt hơn như sau:
Rõ ràng, bây giờ kết quả sẽ tốt hơn có nghĩa là trình chuyển đổi Struts của chúng tôi đang hoạt động tốt.
Đây là cách bạn có thể tạo nhiều trình chuyển đổi và đăng ký chúng để sử dụng theo yêu cầu của bạn.