1. ค่าเริ่มต้นต่างๆ ในการกำหนดค่า Action
<ชื่อแพ็คเกจ = "csdn" เนมสเปซ = "/ ทดสอบ" ขยาย = "struts-default">
<ชื่อการกระทำ = "helloworld" method = "ดำเนินการ" >
<result name="success">/WEB-INF/page/hello.jsp</result>
</การกระทำ>
</แพ็คเกจ>
1>หากไม่มีการระบุคลาสสำหรับการดำเนินการ ค่าเริ่มต้นคือ ActionSupport
2>หากไม่มีการระบุวิธีการสำหรับการดำเนินการ วิธีการดำเนินการ () ในการดำเนินการจะถูกดำเนินการตามค่าเริ่มต้น
3>หากไม่ได้ระบุแอตทริบิวต์ชื่อของผลลัพธ์ ค่าเริ่มต้นคือสำเร็จ
2. ผลลัพธ์การส่งต่อประเภทต่างๆ ในการดำเนินการ
<ชื่อการกระทำ = "helloworld">
<result name="success">/WEB-INF/page/hello.jsp</result>
</การกระทำ>
การกำหนดค่าผลลัพธ์จะคล้ายกับการส่งต่อใน struts1 แต่ struts2 มีประเภทผลลัพธ์หลายประเภทที่ใช้กันทั่วไป ได้แก่: ดิสแพตเชอร์ (ค่าเริ่มต้น), การเปลี่ยนเส้นทาง, การเปลี่ยนเส้นทาง, ข้อความธรรมดา
ต่อไปนี้เป็นตัวอย่างของประเภทผลลัพธ์ของการเปลี่ยนทิศทางของการดำเนินการ หากการดำเนินการของการเปลี่ยนเส้นทางอยู่ในแพ็คเกจเดียวกัน:
<result type="redirectAction">สวัสดีชาวโลก</result>
หากการดำเนินการเปลี่ยนเส้นทางอยู่ในเนมสเปซอื่น:
<ประเภทผลลัพธ์="redirectAction">
<param name="actionName">สวัสดีชาวโลก</param>
<param name="namespace">/test</param>
</ผล>
ข้อความธรรมดา: แสดงเนื้อหาไฟล์ต้นฉบับ ตัวอย่างเช่น เมื่อเราต้องการแสดงซอร์สโค้ดไฟล์ jsp เหมือนเดิม เราสามารถใช้ประเภทนี้ได้
<ชื่อผลลัพธ์ = "แหล่งที่มา" ประเภท = "ข้อความธรรมดา ">
<param name="location"/xxx.jsp</param>
<param name="charSet">UTF-8</param><!-- ระบุการเข้ารหัสสำหรับการอ่านไฟล์ -->
</ผล>
ในผลลัพธ์ คุณยังสามารถใช้นิพจน์ ${attribute name} เพื่อเข้าถึงคุณลักษณะในการดำเนินการได้ ชื่อคุณลักษณะในนิพจน์จะสอดคล้องกับคุณลักษณะในการดำเนินการ ดังต่อไปนี้:
<result type="redirect">view.jsp?id=${id}</result>
3. การดำเนินการหลายรายการแชร์มุมมองเดียว - การกำหนดค่าผลลัพธ์ทั่วโลก
เมื่อใช้มุมมองเดียวกันในหลาย ๆ การกระทำ เราควรกำหนดผลลัพธ์เป็นมุมมองโดยรวม Global Forward มีให้ใน struts1 และฟังก์ชันที่คล้ายกันมีให้ใน struts2 ด้วย:
<แพ็คเกจ....>
<ผลลัพธ์ระดับโลก>
<ชื่อผลลัพธ์="ข้อความ">/message.jsp</result>
</ผลลัพธ์ระดับโลก>
</แพ็คเกจ>
4. ใส่ค่าเข้าไปในคุณสมบัติ Action
Struts2 มีฟังก์ชันการพึ่งพาการฉีดสำหรับคุณสมบัติใน Action ในไฟล์คอนฟิกูเรชัน struts2 เราสามารถฉีดค่าลงในคุณสมบัติใน Action ได้อย่างง่ายดาย หมายเหตุ: คุณสมบัติต้องมีวิธีการตั้งค่า
HelloWorldAction คลาสสาธารณะ{
สตริงส่วนตัว savePath;
สตริงสาธารณะ getSavePath() {
กลับบันทึกเส้นทาง;
-
โมฆะสาธารณะ setSavePath (สตริง savePath) {
this.savePath = บันทึกพาธ;
-
-
-
<ชื่อแพ็คเกจ = "csdn" เนมสเปซ = "/ ทดสอบ" ขยาย = "struts-default">
<ชื่อการกระทำ = "helloworld">
<param name="savePath">/images</param>
<result name="success">/WEB-INF/page/hello.jsp</result>
</การกระทำ>
</แพ็คเกจ>
ข้อมูลข้างต้นจะแทรก "/images" ลงในแอตทริบิวต์ savePath ของการดำเนินการผ่านทางโหนด <param>
5. ระบุส่วนต่อท้ายคำขอที่ต้องประมวลผลโดย Struts 2
ก่อนหน้านี้เราใช้ส่วนต่อท้าย .action เป็นค่าเริ่มต้นในการเข้าถึงการดำเนินการ ในความเป็นจริง ส่วนต่อท้ายเริ่มต้นสามารถแก้ไขได้ผ่าน "struts.action.extension" คงที่ ตัวอย่างเช่น เราสามารถกำหนดค่า Struts 2 ให้ประมวลผลเฉพาะพาธคำขอที่มี .do เป็นส่วนต่อท้าย:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE สตรัท PUBLIC
"-//มูลนิธิซอฟต์แวร์ Apache//การกำหนดค่า DTD Struts 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<สตรัท>
<ชื่อคงที่="struts.action.extension" value="do"/>
</สตรัท>
หากผู้ใช้จำเป็นต้องระบุส่วนต่อท้ายคำขอหลายรายการ ให้คั่นส่วนต่อท้ายหลายรายการด้วยเครื่องหมายจุลภาค (,) ชอบ:
<ชื่อคงที่="struts.action.extension" value="do,go"/>
6. อธิบายคำจำกัดความของค่าคงที่โดยละเอียด
ค่าคงที่สามารถกำหนดค่าได้ใน struts.xml หรือ struts.properties ขอแนะนำให้กำหนดค่าใน struts.xml วิธีการกำหนดค่าทั้งสองมีดังต่อไปนี้:
กำหนดค่าค่าคงที่ในไฟล์ struts.xml
<สตรัท>
<ชื่อคงที่="struts.action.extension" value="do"/>
</สตรัท>
กำหนดค่าคงที่ใน struts.properties
struts.action.extension=ทำ
เนื่องจากค่าคงที่สามารถกำหนดได้ในไฟล์คอนฟิกูเรชันหลายไฟล์ด้านล่าง เราจึงต้องเข้าใจลำดับการค้นหาที่ struts2 โหลดค่าคงที่:
เสา-default.xml
struts-plugin.xml
สตรัท.xml
สตรัทคุณสมบัติ
เว็บ.xml
หากกำหนดค่าคงที่เดียวกันในหลายไฟล์ ค่าคงที่ที่กำหนดค่าในไฟล์หลังจะเขียนทับค่าคงที่ที่กำหนดในไฟล์ก่อนหน้า
7. รู้เบื้องต้นเกี่ยวกับค่าคงที่ที่ใช้กันทั่วไป
<!-- ระบุชุดการเข้ารหัสเริ่มต้น ซึ่งดำเนินการกับเมธอด setCharacterEncoding ของ HttpServletRequest และเอาต์พุตของ freemarker และความเร็ว -->
<ชื่อคงที่="struts.i18n.encoding" value="UTF-8"/>
<!-- แอ็ตทริบิวต์นี้ระบุส่วนต่อท้ายคำขอที่จำเป็นต้องประมวลผลโดย Struts 2 ค่าดีฟอลต์ของแอ็ตทริบิวต์นี้คือ action นั่นคือ คำร้องขอทั้งหมดที่ตรงกับ *.action จะถูกประมวลผลโดย Struts2
หากผู้ใช้จำเป็นต้องระบุส่วนต่อท้ายคำขอหลายรายการ ให้คั่นส่วนต่อท้ายหลายรายการด้วยเครื่องหมายจุลภาค (,) -
<ชื่อคงที่="struts.action.extension" value="do"/>
<!-- ตั้งค่าว่าเบราว์เซอร์จะแคชเนื้อหาแบบคงที่หรือไม่ ค่าเริ่มต้นจะเป็นจริง (ใช้ในสภาพแวดล้อมการใช้งานจริง) ทางที่ดีควรปิดในระหว่างขั้นตอนการพัฒนา -->
<ชื่อคงที่ = "struts.serve.static.browserCache" ค่า = "false"/>
<!-- เมื่อไฟล์คอนฟิกูเรชัน struts ได้รับการแก้ไข ไม่ว่าระบบจะโหลดไฟล์ซ้ำโดยอัตโนมัติหรือไม่ก็ตาม ค่าเริ่มต้นจะเป็นเท็จ (ใช้ในสภาพแวดล้อมการใช้งานจริง) วิธีที่ดีที่สุดคือเปิดใช้งานในระหว่างขั้นตอนการพัฒนา -->
<ชื่อคงที่ =ค่า "struts.configuration.xml.reload" = "true"/>
<!-- ใช้ในโหมดการพัฒนาเพื่อให้สามารถพิมพ์ข้อความแสดงข้อผิดพลาดโดยละเอียดเพิ่มเติมได้ -->
<ชื่อคงที่ =ค่า "struts.devMode" = "true" />
<!--ธีมมุมมองเริ่มต้น-->
<ชื่อคงที่="struts.ui.theme" value="simple" />
<! เมื่อรวมเข้ากับสปริง ให้ระบุว่าสปริงมีหน้าที่ในการสร้างออบเจ็กต์การดำเนินการ -->
<ชื่อคงที่ =ค่า "struts.objectFactory" = "สปริง" />
<!คุณสมบัตินี้กำหนดว่า Struts 2 รองรับการเรียกเมธอดแบบไดนามิกหรือไม่ ค่าดีฟอลต์ของคุณสมบัตินี้เป็นจริง หากคุณต้องการปิดการเรียกเมธอดแบบไดนามิก คุณสามารถตั้งค่าคุณสมบัตินี้เป็นเท็จได้ -
<ชื่อคงที่ = "struts.enable.DynamicMethodInvocation" value = "false"/>
<!--ขนาดจำกัดสำหรับไฟล์ที่อัพโหลด-->
<ชื่อคงที่="struts.multipart.maxSize" value="10701096"/>
8. ระบุไฟล์การกำหนดค่าสตรัทหลายไฟล์สำหรับแอปพลิเคชัน
ในแอปพลิเคชันส่วนใหญ่ เมื่อขนาดแอปพลิเคชันเพิ่มขึ้น จำนวนการดำเนินการในระบบก็จะเพิ่มขึ้นอย่างมีนัยสำคัญเช่นกัน ทำให้ไฟล์คอนฟิกูเรชัน struts.xml บวมมาก เพื่อหลีกเลี่ยงไม่ให้ไฟล์ struts.xml มีขนาดใหญ่เกินไปและบวม และปรับปรุงความสามารถในการอ่านไฟล์ struts.xml เราสามารถแยกไฟล์คอนฟิกูเรชัน struts.xml ออกเป็นไฟล์คอนฟิกูเรชันหลายไฟล์ จากนั้นรวมไฟล์คอนฟิกูเรชันอื่นๆ ใน struts.xml ไฟล์. struts.xml ต่อไปนี้ระบุไฟล์คอนฟิกูเรชันหลายไฟล์ผ่านองค์ประกอบ <include>:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE สตรัท PUBLIC
"-//มูลนิธิซอฟต์แวร์ Apache//การกำหนดค่า DTD Struts 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<สตรัท>
<รวมไฟล์="struts-user.xml"/>
<รวมไฟล์="struts-order.xml"/>
</สตรัท>
ด้วยวิธีนี้ เราสามารถเพิ่ม Struts 2 Action ให้กับไฟล์คอนฟิกูเรชันหลายไฟล์ตามโมดูลได้
9. การเรียกเมธอดแบบไดนามิก
หากมีหลายวิธีใน Action เราสามารถใช้ !+ชื่อเมธอด เพื่อเรียกเมธอดที่ระบุได้ ดังต่อไปนี้:
HelloWorldAction คลาสสาธารณะ{
ข้อความสตริงส่วนตัว
-
สตริงสาธารณะดำเนินการ () พ่นข้อยกเว้น {
this.message = "แอปพลิเคชัน struts2 แรกของฉัน";
กลับ "ความสำเร็จ";
-
สตริงสาธารณะ other() พ่นข้อยกเว้น {
this.message = "วิธีที่สอง";
กลับ "ความสำเร็จ";
-
-
สมมติว่าเส้นทาง URL เพื่อเข้าถึงการดำเนินการข้างต้นคือ: /struts/test/helloworld.action
ในการเข้าถึงเมธอด other() ของการดำเนินการ เราสามารถเรียกมันได้ดังนี้:
/struts/test/helloworld!other.action
หากเราไม่ต้องการใช้การเรียกใช้เมธอดแบบไดนามิก เราสามารถปิดการเรียกใช้เมธอดแบบไดนามิกได้โดยใช้ค่าคงที่ struts.enable.DynamicMethodInvocation
<ชื่อคงที่ = "struts.enable.DynamicMethodInvocation" value = "false"/>
10. ใช้ไวด์การ์ดเพื่อกำหนดการกระทำ
<ชื่อแพ็คเกจ = "csdn" เนมสเปซ = "/ ทดสอบ" ขยาย = "struts-default">
<action name="helloworld_*" method="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
</การกระทำ>
</แพ็คเกจ>
HelloWorldAction คลาสสาธารณะ{
ข้อความสตริงส่วนตัว
-
สตริงสาธารณะดำเนินการ () พ่นข้อยกเว้น {
this.message = "แอปพลิเคชัน struts2 แรกของฉัน";
กลับ "ความสำเร็จ";
-
สตริงสาธารณะ other() พ่นข้อยกเว้น {
this.message = "วิธีที่สอง";
กลับ "ความสำเร็จ";
-
-
หากต้องการเข้าถึงเมธอด other() คุณสามารถเข้าถึงได้ผ่าน URL เช่นนี้: /test/helloworld_other.action
11. รับพารามิเตอร์คำขอ
ใช้ประเภทพื้นฐานเพื่อรับพารามิเตอร์คำขอ (รับ/โพสต์)
กำหนดแอ็ตทริบิวต์ที่มีชื่อเดียวกันกับพารามิเตอร์คำขอในคลาส Action และ struts2 สามารถรับพารามิเตอร์คำขอได้โดยอัตโนมัติ และกำหนดให้กับแอ็ตทริบิวต์ที่มีชื่อเดียวกัน
เส้นทางคำขอ: http://localhost:8080/test/view.action?id=78
ProductAction ระดับสาธารณะ {
รหัสจำนวนเต็มส่วนตัว
public void setId(Integer id) {//struts2 ใช้เทคโนโลยีการสะท้อนเพื่อเรียกเมธอด setter ของคุณสมบัติที่มีชื่อเดียวกับพารามิเตอร์คำขอเพื่อให้ได้ค่าพารามิเตอร์คำขอ
this.id = ไอดี;
-
สาธารณะจำนวนเต็ม getId () {return id;}
-
ใช้ประเภทคอมโพสิตเพื่อรับเส้นทางคำขอพารามิเตอร์คำขอ: http://localhost:8080/test/view.action?product.id=78
ProductAction ระดับสาธารณะ {
สินค้าส่วนตัว
โมฆะสาธารณะ setProduct (ผลิตภัณฑ์ผลิตภัณฑ์) { this.product = product; }
สินค้าสาธารณะ getProduct () { คืนสินค้า; }
-
ขั้นแรก Struts2 สร้างอ็อบเจ็กต์ผลิตภัณฑ์โดยการเรียกตัวสร้างเริ่มต้นของ Product ผ่านเทคโนโลยีการสะท้อน จากนั้นจึงเรียกเมธอด setter ของคุณสมบัติที่มีชื่อเดียวกันกับพารามิเตอร์คำขอในผลิตภัณฑ์ผ่านเทคโนโลยีการสะท้อน เพื่อรับค่าพารามิเตอร์คำขอ
12. ความหมายของการแปลงประเภท
สำหรับกรอบงาน MVC อัจฉริยะ เป็นสิ่งที่หลีกเลี่ยงไม่ได้ที่จะใช้การแปลงประเภท เนื่องจากพารามิเตอร์คำขอของแอปพลิเคชันโครงสร้าง B/S (เบราว์เซอร์/เซิร์ฟเวอร์) ถูกส่งไปยังเซิร์ฟเวอร์ผ่านเบราว์เซอร์ พารามิเตอร์เหล่านี้จึงไม่สามารถมีประเภทข้อมูลที่หลากหลายได้ ดังนั้นประเภทข้อมูล การแปลงจะต้องเสร็จสิ้นบนฝั่งเซิร์ฟเวอร์
กรอบงาน MVC เป็นโซลูชันเลเยอร์การนำเสนอและควรให้การสนับสนุนการแปลงประเภท Struts2 ให้การสนับสนุนการแปลงประเภทที่มีประสิทธิภาพมาก
13. การประมวลผลข้อมูลเลเยอร์การนำเสนอ
สำหรับเว็บแอปพลิเคชัน เลเยอร์การนำเสนอส่วนใหญ่จะใช้เพื่อโต้ตอบกับผู้ใช้ รวมถึงการรวบรวมข้อมูลอินพุตของผู้ใช้และการนำเสนอสถานะของเซิร์ฟเวอร์แก่ผู้ใช้ ดังนั้นการไหลของข้อมูลในเลเยอร์การนำเสนอจึงมีสองทิศทางเป็นหลัก: ข้อมูลอินพุตและข้อมูลเอาต์พุต
สำหรับข้อมูลอินพุต: คุณต้องทำการแปลงจากข้อมูลสตริงเป็นข้อมูลหลายประเภทให้เสร็จสิ้น โดยปกติแล้วโปรแกรมจะไม่สามารถดำเนินการให้เสร็จสิ้นได้โดยอัตโนมัติ และจำเป็นต้องแปลงเป็นโค้ดด้วยตนเอง
สำหรับข้อมูลเอาต์พุต: ทั้ง java และ jsp รองรับเอาต์พุตโดยตรงของข้อมูลหลายประเภท
การประมวลผลข้อมูลอื่นในเลเยอร์การนำเสนอคือ: การตรวจสอบข้อมูล ซึ่งแบ่งออกเป็นการตรวจสอบไคลเอนต์และการตรวจสอบฝั่งเซิร์ฟเวอร์ ซึ่งจะอธิบายรายละเอียดในภายหลัง
14. การแปลงประเภท
พารามิเตอร์ HTTP เป็นประเภทสตริงทั้งหมด ข้อมูลที่บันทึกไว้อาจเป็นสตริง ตัวเลข บูลีน วันที่และเวลา ฯลฯ หรือประเภท JavaBean การแปลงชนิดด้วยตนเอง เช่น การแปลงสตริงเป็นวันที่ โดย: รับสตริงผ่านเมธอด request.getParameter ตรวจสอบว่าสตริงว่างเปล่าหรือไม่ การแปลงสตริงเป็นอ็อบเจ็กต์ Date ผ่านเมธอด DateFormat.parse
15. การแปลงแบบ Struts2
การแปลงชนิดในตัว Struts2
สตริงและบูลีนทำให้การแปลงระหว่างค่าสตริงและบูลีนเสร็จสมบูรณ์
การแปลงสตริงและถ่านระหว่างสตริงและอักขระธรรมดา
String, int และ Integer ทำการแปลงระหว่างสตริงและจำนวนเต็มให้เสร็จสมบูรณ์
สตริงและลองการแปลงระหว่างค่าสตริงและจำนวนเต็มยาวเสร็จสมบูรณ์
สตริง สอง และสองเท่าทำให้การแปลงสตริงและค่าจุดทศนิยมที่มีความแม่นยำสองเท่าสมบูรณ์
สตริงและโฟลตทำให้การแปลงระหว่างสตริงและจุดลอยตัวที่มีความแม่นยำเดียวเสร็จสมบูรณ์
สตริงและวันที่ทำการแปลงระหว่างประเภทสตริงและวันที่ให้เสร็จสมบูรณ์ รูปแบบวันที่ใช้รูปแบบ SHORT ของ Locale ที่ผู้ใช้ร้องขอรูปแบบ
สตริงและอาร์เรย์ ในกรณีเริ่มต้น องค์ประกอบอาร์เรย์จะเป็นสตริง หากผู้ใช้กำหนดตัวแปลงชนิด ก็สามารถเป็นชนิดข้อมูลคอมโพสิตอื่นๆ ได้เช่นกัน
สตริงและแผนที่และรายการ
16. API การแปลงประเภท Struts
ตัวแปลงประเภทของ Struts2 ถูกนำมาใช้จริงตาม OGNL มีอินเทอร์เฟซ ognl.TypeConverter ในโปรเจ็กต์ OGNL อินเทอร์เฟซนี้เป็นอินเทอร์เฟซที่ต้องนำไปใช้เพื่อใช้ตัวแปลงประเภท อินเทอร์เฟซถูกกำหนดดังนี้:
TypeConverter อินเทอร์เฟซสาธารณะ {
วัตถุสาธารณะแปลงค่า (แมป arg0, วัตถุ arg1, สมาชิก arg2, สตริง arg3,
วัตถุ arg4, คลาส arg5) {
กลับเป็นโมฆะ;
-
หากต้องการใช้ตัวแปลงประเภท คุณต้องใช้ TypeConverter ด้านบน อย่างไรก็ตาม วิธีการในอินเทอร์เฟซด้านบนนั้นซับซ้อนเกินไป ดังนั้นโปรเจ็กต์ OGNL จึงจัดเตรียมคลาสการใช้งานของอินเทอร์เฟซนี้: ognl.DefaultTypeConverter คุณสามารถใช้ตัวแปลงประเภทของคุณเองได้ สืบทอดคลาสนี้ คลาสถูกกำหนดดังนี้:
คลาสสาธารณะ DefaultTypeConverter ขยายวัตถุที่ใช้ TypeConverter {
วัตถุสาธารณะ ConvertValue (แมป <สตริง, วัตถุ> บริบท, ค่าวัตถุ, คลาส toType) {
-
……//วิธีการอื่นๆ
-
บทบาทของวิธี ConvertValue คือการแปลงประเภทให้เสร็จสมบูรณ์ แต่การแปลงชนิดนี้เป็นแบบสองทิศทาง เมื่อจำเป็นต้องแปลงสตริงเป็นอินสแตนซ์ของวัตถุ วิธีการนี้ก็จะถูกใช้ เมื่ออินสแตนซ์ของวัตถุถูกแปลงเป็นสตริง วิธีการนี้ก็จะถูกแปลงเช่นกัน ใช้แล้ว. การแปลงนี้ดำเนินการผ่านประเภทพารามิเตอร์ toType ซึ่งเป็นประเภทเป้าหมายที่ต้องแปลง ดังนั้น จึงสามารถกำหนดทิศทางการแปลงตามพารามิเตอร์ toType
พารามิเตอร์วิธี ConvertValue และความหมายที่ส่งคืน พารามิเตอร์แรก: บริบทคือบริบทของสภาพแวดล้อมการแปลงประเภท พารามิเตอร์ตัวที่สอง: value คือพารามิเตอร์ที่ต้องแปลงด้วย
พารามิเตอร์ที่สาม: toType คือประเภทเป้าหมายที่แปลงแล้ว ค่าที่ส่งคืนของวิธีนี้คือมูลค่าหลังการแปลงประเภท ประเภทของค่าจะเปลี่ยนไปตามทิศทางของการแปลงด้วย จะเห็นได้ว่าเมธอด ConvertValue ที่แปลงแล้วยอมรับค่าที่จำเป็นต้องแปลง ประเภทเป้าหมายที่ต้องแปลงคือพารามิเตอร์ จากนั้นจะส่งกลับค่าเป้าหมายที่แปลงแล้ว
เหตุใด Value จึงเป็นอาร์เรย์สตริง
สำหรับตัวแปลง DefaultTypeConverter จะต้องคำนึงถึงสถานการณ์ที่พบบ่อยที่สุด ดังนั้นจึงถือว่าพารามิเตอร์คำขอทั้งหมดเป็นอาร์เรย์สตริงแทนที่จะเป็นสตริง เทียบเท่ากับค่าพารามิเตอร์ที่ได้รับจาก getParameterValues()