Struts 2 - ธีมและเทมเพลต

ก่อนที่จะเริ่มบทช่วยสอนจริงสำหรับบทนี้ให้เราพิจารณาคำจำกัดความที่กำหนดโดย https://struts.apache.org-

ซีเนียร์ No ข้อกำหนดและคำอธิบาย
1

TAG

โค้ดชิ้นเล็ก ๆ ที่เรียกใช้งานจากภายใน JSP, FreeMarker หรือ Velocity

2

TEMPLATE

บิตของโค้ดมักเขียนใน FreeMarker ซึ่งสามารถแสดงผลโดยแท็กบางแท็ก (แท็ก HTML)

3

THEME

ชุดแม่แบบที่รวมเข้าด้วยกันเพื่อมอบฟังก์ชันการทำงานทั่วไป

ฉันขอแนะนำให้อ่านบทStruts2 Localizationเพราะเราจะใช้ตัวอย่างเดียวกันอีกครั้งในการออกกำลังกายของเรา

เมื่อคุณใช้ไฟล์ Struts 2แท็กเช่น <s: submit ... >, <s: textfield ... > ฯลฯ ในหน้าเว็บของคุณเฟรมเวิร์ก Struts 2 จะสร้างโค้ด HTML ด้วยรูปแบบและเค้าโครงที่กำหนดไว้ล่วงหน้า Struts 2 มาพร้อมกับสามธีมในตัว -

ซีเนียร์ No ธีมและคำอธิบาย
1

SIMPLE theme

ธีมมินิมอลที่ไม่มี "ระฆังและนกหวีด" ตัวอย่างเช่นแท็กฟิลด์ข้อความแสดงผลแท็ก HTML <input /> โดยไม่มีป้ายกำกับการตรวจสอบความถูกต้องการรายงานข้อผิดพลาดหรือการจัดรูปแบบหรือฟังก์ชันอื่น ๆ

2

XHTML theme

นี่เป็นธีมเริ่มต้นที่ Struts 2 ใช้และมีพื้นฐานทั้งหมดที่ชุดรูปแบบธรรมดามีให้และเพิ่มคุณสมบัติต่างๆเช่นเค้าโครงตารางสองคอลัมน์มาตรฐานสำหรับ HTML, ป้ายกำกับสำหรับ HTML แต่ละรายการ, การตรวจสอบความถูกต้องและการรายงานข้อผิดพลาดเป็นต้น

3

CSS_XHTML theme

ชุดรูปแบบนี้ให้ข้อมูลพื้นฐานทั้งหมดที่ชุดรูปแบบเรียบง่ายมีให้และเพิ่มคุณสมบัติต่างๆเช่นรูปแบบที่ใช้ CSS มาตรฐานสองคอลัมน์โดยใช้ <div> สำหรับแท็ก HTML Struts ป้ายกำกับสำหรับแท็ก HTML Struts แต่ละแท็กที่วางตามสไตล์ชีท CSS .

ตามที่กล่าวไว้ข้างต้นหากคุณไม่ได้ระบุธีม Struts 2 จะใช้ธีม xhtml ตามค่าเริ่มต้น ตัวอย่างเช่นแท็กเลือก Struts 2 นี้ -

<s:textfield name = "name" label = "Name" />

สร้างมาร์กอัป HTML ต่อไปนี้ -

<tr>

   <td class="tdLabel">
      <label for = "empinfo_name" class="label">Name:</label>
   </td>
   <td>
      <input type = "text" name = "name" value = "" id = "empinfo_name"/>
   </td>

</tr>

ที่นี่ empinfo คือชื่อการดำเนินการที่กำหนดในไฟล์ struts.xml

การเลือกธีม

คุณสามารถระบุธีมตาม Struts 2 พื้นฐานแท็กหรือคุณสามารถใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อระบุว่าควรใช้ธีม Struts 2 -

  • แอตทริบิวต์ธีมบนแท็กเฉพาะ

  • แอ็ตทริบิวต์ธีมบนแท็กแบบฟอร์มโดยรอบของแท็ก

  • แอตทริบิวต์ขอบเขตหน้าชื่อ "ธีม"

  • แอตทริบิวต์ request-scoped ชื่อ "theme"

  • แอตทริบิวต์ขอบเขตเซสชันชื่อ "ธีม"

  • แอตทริบิวต์ที่กำหนดขอบเขตแอปพลิเคชันชื่อ "ธีม"

  • คุณสมบัติ struts.ui.theme ใน struts.properties (ค่าดีฟอลต์คือ xhtml)

ต่อไปนี้เป็นไวยากรณ์ที่จะระบุในระดับแท็กหากคุณต้องการใช้ธีมที่แตกต่างกันสำหรับแท็กต่างๆ -

<s:textfield name = "name" label = "Name" theme="xhtml"/>

เนื่องจากการใช้ธีมตามแท็กนั้นไม่ค่อยเป็นประโยชน์ดังนั้นเราสามารถระบุกฎในรูปแบบ struts.properties ไฟล์โดยใช้แท็กต่อไปนี้ -

# Standard UI theme
struts.ui.theme = xhtml
# Directory where theme template resides
struts.ui.templateDir = template
# Sets the default template type. Either ftl, vm, or jsp
struts.ui.templateSuffix = ftl

ต่อไปนี้เป็นผลลัพธ์ที่เราเลือกจากบทการแปลภาษาที่เราใช้ธีมเริ่มต้นด้วยการตั้งค่า struts.ui.theme = xhtml ใน struts-default.properties ไฟล์ที่มาตามค่าเริ่มต้นในไฟล์ struts2-core.xy.z.jar

ธีมทำงานอย่างไร?

สำหรับธีมที่กำหนดทุกแท็ก struts จะมีเทมเพลตที่เกี่ยวข้องเช่น s:textfield → text.ftl และ s:password → password.ftl เป็นต้น

ไฟล์เทมเพลตเหล่านี้ถูกบีบอัดในไฟล์ struts2-core.xy.z.jar ไฟล์เทมเพลตเหล่านี้เก็บเค้าโครง HTML ที่กำหนดไว้ล่วงหน้าสำหรับแต่ละแท็ก

ทางนี้, Struts 2 เฟรมเวิร์กสร้างโค้ดมาร์กอัป HTML สุดท้ายโดยใช้แท็ก Sturts และเทมเพลตที่เกี่ยวข้อง

Struts 2 tags + Associated template file = Final HTML markup code.

เทมเพลตเริ่มต้นเขียนใน FreeMarker และมีส่วนขยาย .ftl.

คุณยังสามารถออกแบบเทมเพลตของคุณโดยใช้ velocity หรือ JSP และตั้งค่าคอนฟิกใน struts.properties โดยใช้ struts.ui.templateSuffix และ struts.ui.templateDir.

การสร้างธีมใหม่

วิธีที่ง่ายที่สุดในการสร้างธีมใหม่คือการคัดลอกไฟล์ธีม / เทมเพลตที่มีอยู่และทำการแก้ไขที่จำเป็น

เริ่มต้นด้วยการสร้างโฟลเดอร์ชื่อ templateในWebContent / WEBINF / คลาสและโฟลเดอร์ย่อยที่มีชื่อธีมใหม่ของเรา ยกตัวอย่างเช่นWebContent / WEB-INF / เรียน / แม่แบบ / mytheme

จากที่นี่คุณสามารถเริ่มสร้างเทมเพลตตั้งแต่เริ่มต้นหรือคุณสามารถคัดลอกเทมเพลตจากไฟล์ Struts2 distribution ซึ่งคุณสามารถแก้ไขได้ตามต้องการในอนาคต

เรากำลังจะแก้ไขเทมเพลตเริ่มต้นที่มีอยู่ xhtmlเพื่อการเรียนรู้ ตอนนี้ให้เราคัดลอกเนื้อหาจากstruts2-core-xyzjar / template / xhtmlไปยังไดเร็กทอรีธีมของเราและแก้ไขเฉพาะไฟล์ WebContent / WEBINF / class / template / mytheme / control .ftl เมื่อเราเปิด control.ftl ซึ่งจะมีบรรทัดดังนี้ -

<table class="${parameters.cssClass?default('wwFormTable')?html}"<#rt/>
<#if parameters.cssStyle??> style="${parameters.cssStyle?html}"<#rt/>
</#if>
>

ให้เราเปลี่ยนไฟล์ด้านบน control.ftl มีเนื้อหาดังต่อไปนี้ -

<table style = "border:1px solid black;">

ถ้าคุณจะตรวจสอบ form.ftl แล้วคุณจะพบว่า control.ftlถูกใช้ในไฟล์นี้ แต่ form.ftl อ้างถึงไฟล์นี้จากธีม xhtml ให้เราเปลี่ยนเป็นดังนี้ -

<#include "/${parameters.templateDir}/xhtml/form-validate.ftl" />
<#include "/${parameters.templateDir}/simple/form-common.ftl" />
<#if (parameters.validate?default(false))>
   onreset = "${parameters.onreset?default('clearErrorMessages(this);\
   clearErrorLabels(this);')}"
   
<#else>
   <#if parameters.onreset??>
      onreset="${parameters.onreset?html}"
   </#if>
</#if>
#include "/${parameters.templateDir}/mytheme/control.ftl" />

ฉันคิดว่าคุณคงไม่มีความเข้าใจเกี่ยวกับไฟล์ FreeMarker ภาษาเทมเพลตคุณยังสามารถเข้าใจสิ่งที่ต้องทำโดยดูที่ไฟล์. ftl

อย่างไรก็ตามให้เราบันทึกการเปลี่ยนแปลงข้างต้นและกลับไปที่ตัวอย่างการแปลภาษาของเราและสร้างไฟล์ WebContent/WEB-INF/classes/struts.properties ไฟล์ที่มีเนื้อหาต่อไปนี้

# Customized them
struts.ui.theme = mytheme
# Directory where theme template resides
struts.ui.templateDir = template
# Sets the template type to ftl.
struts.ui.templateSuffix = ftl

หลังจากการเปลี่ยนแปลงนี้คลิกขวาที่ชื่อโครงการแล้วคลิก Export > WAR Fileเพื่อสร้างไฟล์ War จากนั้นปรับใช้ WAR นี้ในไดเร็กทอรี webapps ของ Tomcat สุดท้ายเริ่มเซิร์ฟเวอร์ Tomcat และพยายามเข้าถึง URLhttp://localhost:8080/HelloWorldStruts2. สิ่งนี้จะสร้างหน้าจอต่อไปนี้ -

คุณสามารถเห็นเส้นขอบรอบองค์ประกอบฟอร์มซึ่งเป็นผลมาจากการเปลี่ยนแปลงที่เราทำในธีมนอกหลังจากคัดลอกจากธีม xhtml หากคุณใช้ความพยายามเพียงเล็กน้อยในการเรียนรู้ FreeMarker คุณจะสามารถสร้างหรือปรับเปลี่ยนธีมของคุณได้อย่างง่ายดาย

ฉันหวังว่าตอนนี้คุณมีความเข้าใจพื้นฐานเกี่ยวกับ Sturts 2 ธีมและเทมเพลตใช่ไหม