ฉันได้เรียนรู้ SSH เมื่อเร็ว ๆ นี้และฉันไม่ได้เข้าใจความแตกต่างระหว่าง $,%,%, และ# ฉันได้ทำแบบฝึกหัดเล็ก ๆ น้อย ๆ และค่อยๆเข้าใจเล็กน้อย ฉันจะบันทึกสิ่งที่ฉันได้เรียนรู้
เอนทิตีต่อไปนี้มีอยู่:
บุคคลชั้นเรียนสาธารณะ {ID INT ส่วนตัว; ชื่อสตริงส่วนตัว; สาธารณะ int getId () {return id; } บุคคลสาธารณะ (int id, ชื่อสตริง) {super (); this.id = id; ชื่อ = ชื่อ; } บุคคลสาธารณะ () {super (); } โมฆะสาธารณะ setId (int id) {this.id = id; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {name = name; - ในการกระทำของ Struts2 รหัสต่อไปนี้เขียนขึ้น:
@Override String Public Execute () พ่นข้อยกเว้น {// แอปพลิเคชันบุคคล p = บุคคลใหม่ (1, "จาง"); ActionContext.getContext (). getApplication (). ใส่ ("บุคคล", p); // เซสชันบุคคล P1 = บุคคลใหม่ (3, "Wangwu"); ActionContext.getContext (). getSession (). ใส่ ("บุคคล", p1); // ขอบุคคล p2 = บุคคลใหม่ (2, "lisi"); ActionContext.getContext (). ใส่ ("บุคคล", p2); // servletContext person p3 = บุคคลใหม่ (5, "xiaoming"); ActionContext.getContext (). getContextMap (). ใส่ ("บุคคล", p3); บุคคล P4 = บุคคลใหม่ (3, "Wangwu"); ActionContext.getContext (). getValuestack (). push (p4); กลับ "ความสำเร็จ"; - จัดเก็บวัตถุบุคคลในแอปพลิเคชันเซสชันการร้องขอ servletContext, Valuestack ตามลำดับ จากนั้นใน JSP เราสามารถรับได้ในวิธีต่อไปนี้:
บุคคล: <อินพุต type = "text" name = "name" value = "$ {person}" /> <br /> id: <อินพุต type = "text" name = "name" value = "$ {person.id}" /> <br /> name: <input type = "text" name = "name" value = "$ {person.name}" /> ข้อมูลบุคคลที่ได้รับจากรหัสข้างต้นคือ Xiaoming นั่นคือข้อมูลที่เก็บไว้ใน ActionContext.getContext () GetContextMap () โดยการสอบถามการใช้งานของ $ พบว่ามีวิธีที่จะได้รับเป้าหมายของ $ นั่นคือ
ActionContext.getContext (). getContextMap ()> actionContext.getContext ()> actionContext.getContext (). getSession ()> actionContext.getContext (). getApplication () สำหรับวัตถุที่มีชื่อเดียวกันมีอยู่ในขอบเขตที่แตกต่างกัน (ขอบเขต) วิธีการค้นหาของ $ จะดำเนินการตามขั้นตอนข้างต้น หากพบมันจะเป็นเอาต์พุต หากไม่พบมันจะยังคงค้นหาในระดับก่อนหน้า เมื่อไม่มีด้านบนอยู่มันจะส่งออกว่าง
จากนั้นการใช้งานของ $ คือ: $ {scope.object.attribute}
ค่าแอตทริบิวต์ของขอบเขตคือการร้องขอเซสชันแอปพลิเคชัน เมื่อไม่ได้เขียนโดยค่าเริ่มต้นคุณจะค้นหาตามโครงการด้านบน หากคุณพบคุณจะส่งออกค่าแอตทริบิวต์ที่เกี่ยวข้อง
ในแท็ก Struts บันทึก A:
<s: ค่าคุณสมบัติ = "#application.person"/>
จะเห็นได้ว่ามีการใช้หมายเลข # ในเวลานี้ โดยส่วนตัวแล้วฉันคิดว่าการใช้ # และ $ นั้นเหมือนกัน ตราบใดที่คุณโหลดวัตถุคุณต้องส่งออกลงในแผนที่ (servletContext, คำขอ, เซสชันและแอปพลิเคชัน) ในช่วงที่แตกต่างกันเมื่อแสดงในมุมมองโดยใช้ <S: ค่าคุณสมบัติ = "#scope.Object.attribute"> นั้นเหมือนกับ $ การทำความเข้าใจ แต่เมื่อคุณใช้แท็ก struts ตัวอย่างเช่น:
<s: textfield name = "person.name"> </s: textfield>
มันสามารถเข้าใจได้อย่างสมบูรณ์เป็น
<input type = "text" name = "persom.name" id = "person.name" value = "<s: ค่าคุณสมบัติ ="#person.name " />" />
นั่นคือแท็ก struts ถูกห่อหุ้มไว้สำหรับเราในข้อความ html <s: ค่าคุณสมบัติ = "#target.name"/> ซึ่งสามารถช่วยฉันได้มาก
ในทำนองเดียวกันการใช้ # คือ: <s: ค่าคุณสมบัติ = " # scope.object.attribute" />
แน่นอนคุณสามารถใช้แท็กที่กำหนดโดย struts2 เพื่อบันทึกความยุ่งยากในการเขียนรหัสที่ซ้ำกันมากเกินไป ในความเป็นจริง # มีการใช้งานอื่น ๆ เช่นการสร้างวัตถุเช่นแผนที่ แต่โดยส่วนตัวแล้วฉันคิดว่ายุคของการเขียนโค้ดมากเกินไปในมุมมองได้ผ่านไปและการใช้งานนี้ไม่มีความหมาย ยิ่งกว่านั้นคราวนี้ฉันเขียนกระบวนการแสดงในมุมมองเท่านั้นดังนั้นฉันจะไม่พูดถึงเรื่องนี้ที่อื่น
สุดท้ายเรามาพูดถึงการใช้งาน % เพื่อให้ง่าย %{} เป็นนิพจน์การคำนวณสตริง ตัวอย่างเช่นมีลิงก์บางอย่างในมุมมองซึ่งโดยทั่วไปมีฟังก์ชั่นพื้นฐานเช่น CRUD สำหรับฟังก์ชั่นการเพิ่มและอัปเดตสามารถเสร็จสิ้นได้ในหน้าเดียวกัน ความแตกต่างคือที่อยู่ที่เราส่งนั้นแตกต่างกัน ตัวอย่างเช่นมันอาจเป็นเช่นนี้: สำหรับวิธีการเพิ่มที่อยู่คือ user_add.action และสำหรับวิธี udpate ที่อยู่คือ user_update.action ดังนั้นในรูปแบบสามารถใช้การตัดสินได้:
<s: form action = "ผู้ใช้ _%{id == 0? 'เพิ่ม': 'update'}"> </form> ฮ่าฮ่าดังนั้นสองหน้าก่อนหน้านี้สามารถแก้ไขได้ในหนึ่งหน้า
ในทำนองเดียวกัน % จะถูกใช้บ่อยขึ้นกับฉลากการตัดสินเช่น IF และ IFELSE ใน Struts ท้ายที่สุดมันเป็นการเปรียบเทียบหรือไม่? - - -
<s: ถ้า test = "%{false}"> <div> จะไม่ถูกเรียกใช้ </div> </s: ถ้า> <s: elseif test = "%{true}"> <div> สุดท้ายเรามาพูดคุยเกี่ยวกับวิธีการที่เป็นประโยชน์ของ % นี้โดยสมมติว่ามีรายการที่แสดงผลการเรียนที่ผ่านของนักเรียนทั้งหมด (เช่นเกรดที่ล้มเหลวจะไม่แสดงด้านบน) หาก % ที่ใช้จะง่ายมาก ไม่เพียงแค่ใส่รหัสก่อน:
ระดับสาธารณะ stduent ใช้ java.io.serializable {ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = -691038814755396419L; ID int ส่วนตัว; ชื่อสตริงส่วนตัว; คะแนน INT ส่วนตัว; หัวข้อสตริงส่วนตัว สาธารณะ int getId () {return id; } โมฆะสาธารณะ setId (int id) {this.id = id; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } public int getScore () {คะแนนคืน; } โมฆะสาธารณะ setScore (คะแนน int) {this.score = คะแนน; } สตริงสาธารณะ getSubject () {return subject; } โมฆะสาธารณะ setSubject (หัวเรื่องสตริง) {this.subject = หัวเรื่อง; } / ** * ที่นี่เราตัดสินว่าคะแนนผ่านการสอบ * @param socre * @return * / public boolean ispast (int socre) {return getscore ()> 60; - ดังนั้นตอนนี้ค้นหาเกรดของนักเรียนในฐานข้อมูลและวางไว้ในรายการสำหรับการจัดเก็บชั่วคราว ในหน้า JSP เราสามารถใช้รหัสต่อไปนี้เพื่อควบคุมว่าส่งออกระบบเกรดผ่าน:
<s: iterator value = "#Alluser"> <!- พิจารณาว่าจะผ่านบรรทัดหรือไม่ถ้าคุณผ่านบรรทัดมันจะเป็นเอาต์พุตมิฉะนั้นคุณจะยอมแพ้! -> <s: ถ้า test = "#session.user.ispast (คะแนน)"> ชื่อ: <s: textfield name = "name"> </s: textfield> คะแนน: <s: textfield name = "คะแนน"> </s: textfield>/subject: <s: textfield name = "subject"> </s: textfield> </s:
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!