Struts 2 - การแปลงประเภท
ทุกอย่างในคำขอ HTTP จะถือว่าเป็นไฟล์ Stringโดยโปรโตคอล ซึ่งรวมถึงตัวเลขบูลีนจำนวนเต็มวันที่ทศนิยมและอื่น ๆ อย่างไรก็ตามในคลาส Struts คุณสามารถมีคุณสมบัติของข้อมูลประเภทใดก็ได้
Struts กำหนดคุณสมบัติให้คุณโดยอัตโนมัติอย่างไร
Struts ใช้ตัวแปลงประเภทต่างๆใต้ฝาปิดเพื่อทำการยกของหนัก
ตัวอย่างเช่นหากคุณมีแอตทริบิวต์จำนวนเต็มในคลาส Action Struts จะแปลงพารามิเตอร์คำขอเป็นแอตทริบิวต์จำนวนเต็มโดยอัตโนมัติโดยที่คุณไม่ต้องทำอะไรเลย โดยค่าเริ่มต้น Struts มาพร้อมกับตัวแปลงประเภทต่างๆ
หากคุณกำลังใช้ตัวแปลงใด ๆ ในรายการด้านล่างคุณก็ไม่มีอะไรต้องกังวล -
- จำนวนเต็มลอยคู่ทศนิยม
- วันที่และวันที่และเวลา
- อาร์เรย์และคอลเลกชัน
- Enumerations
- Boolean
- BigDecimal
ในบางครั้งที่คุณใช้ชนิดข้อมูลของคุณเองจำเป็นต้องเพิ่มตัวแปลงของคุณเองเพื่อให้ Struts ทราบถึงวิธีการแปลงค่าเหล่านั้นก่อนที่จะแสดง พิจารณาคลาส POJO ต่อไปนี้Environment.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;
}
}
นี่เป็นคลาสที่ง่ายมากที่มีแอตทริบิวต์ที่เรียกว่า nameไม่มีอะไรพิเศษเกี่ยวกับคลาสนี้ ให้เราสร้างคลาสอื่นที่มีข้อมูลเกี่ยวกับระบบ -SystemDetails.java.
สำหรับจุดประสงค์ของแบบฝึกหัดนี้ฉันได้ฮาร์ดโค้ดสภาพแวดล้อมเป็น "การพัฒนา" และระบบปฏิบัติการเป็น "Windows XP SP3" แล้ว
ในโครงการแบบเรียลไทม์คุณจะได้รับข้อมูลนี้จากการกำหนดค่าระบบ
ให้เรามีคลาสแอ็กชันต่อไปนี้ -
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;
}
}
ต่อไปให้เราสร้างไฟล์ JSP ง่ายๆ System.jsp เพื่อแสดงข้อมูลสภาพแวดล้อมและระบบปฏิบัติการ
<%@ 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>
ให้เราเชื่อมต่อไฟล์ system.jsp และ SystemDetails.java เรียนด้วยกันโดยใช้ struts.xml.
คลาส SystemDetails มีเมธอด execute () อย่างง่ายที่ส่งคืนสตริง "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>
คลิกขวาที่ชื่อโครงการแล้วคลิก Export > WAR File เพื่อสร้างไฟล์ War
จากนั้นปรับใช้ WAR นี้ในไดเร็กทอรี webapps ของ Tomcat
สุดท้ายเริ่มเซิร์ฟเวอร์ Tomcat และพยายามเข้าถึง URL http://localhost:8080/HelloWorldStruts2/system.action. สิ่งนี้จะสร้างหน้าจอต่อไปนี้ -
มีอะไรผิดปกติกับผลลัพธ์ข้างต้น? Struts รู้วิธีแสดงและแปลงสตริง "Windows XP SP3" และชนิดข้อมูลในตัวอื่น ๆ แต่ไม่ทราบว่าจะทำอย่างไรกับคุณสมบัติของEnvironmentชนิด. เรียกง่ายๆว่าtoString() วิธีการในชั้นเรียน
ในการแก้ไขปัญหานี้ให้เราสร้างและลงทะเบียนแบบง่าย TypeConverter สำหรับคลาส Environment
สร้างคลาสชื่อ EnvironmentConverter.java ดังต่อไปนี้
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();
}
}
EnvironmentConverter ขยายไฟล์ StrutsTypeConverter คลาสและบอก Struts ถึงวิธีการแปลง Environment เป็น String และในทางกลับกันโดยการแทนที่สองวิธีคือ convertFromString() และ convertToString().
ตอนนี้ให้เราลงทะเบียนตัวแปลงนี้ก่อนที่เราจะใช้ในแอปพลิเคชันของเรา มีสองวิธีในการลงทะเบียนตัวแปลง
หากตัวแปลงจะใช้เฉพาะในการกระทำบางอย่างคุณจะต้องสร้างไฟล์คุณสมบัติที่ต้องตั้งชื่อเป็นไฟล์ '[action-class]'converstion.properties.
ในกรณีของเราเราสร้างไฟล์ชื่อ SystemDetails-converstion.properties ด้วยรายการลงทะเบียนดังต่อไปนี้ -
environment = com.tutorialspoint.struts2.EnvironmentConverter
ในตัวอย่างข้างต้น "สภาพแวดล้อม" คือชื่อของคุณสมบัติในไฟล์ SystemDetails.java ชั้นเรียนและเรากำลังบอกให้ Struts ใช้ไฟล์ EnvironmentConverter สำหรับการแปลงไปและกลับจากคุณสมบัตินี้
อย่างไรก็ตามเราจะไม่ทำเช่นนี้ แต่เราจะลงทะเบียนตัวแปลงนี้ทั่วโลกเพื่อให้สามารถใช้งานได้ตลอดทั้งแอปพลิเคชัน ในการดำเนินการนี้ให้สร้างไฟล์คุณสมบัติที่เรียกว่าxwork-conversion.properties ใน WEBINF/classes โฟลเดอร์ที่มีบรรทัดต่อไปนี้
com.tutorialspoint.struts2.Environment = \
com.tutorialspoint.struts2.EnvironmentConverter
เพียงแค่ลงทะเบียนตัวแปลงทั่วโลกดังนั้น Strutsสามารถทำการแปลงโดยอัตโนมัติทุกครั้งเมื่อพบอ็อบเจ็กต์ประเภท Environment ตอนนี้ถ้าคุณคอมไพล์ใหม่และรันโปรแกรมใหม่คุณจะได้ผลลัพธ์ที่ดีขึ้นดังนี้ -
เห็นได้ชัดว่าตอนนี้ผลลัพธ์จะดีขึ้นซึ่งหมายความว่าตัวแปลง Struts ของเราทำงานได้ดี
นี่คือวิธีที่คุณสามารถสร้างตัวแปลงหลายตัวและลงทะเบียนเพื่อใช้ตามความต้องการของคุณ