العلامات المخصصة هي عناصر لغة JSP محددة من قبل المستخدم. عندما تحتوي صفحة JSP على علامة مخصصة يتم تحويلها إلى servlet، يتم تحويل العلامة إلى عمليات على كائن يسمى معالج العلامات، وهو ما تستدعيه حاوية الويب عند تنفيذ servlet.
يتيح لك ملحق علامة JSP إنشاء علامات جديدة وإدراجها مباشرةً في صفحة JSP. تم تقديم معالجات العلامات البسيطة في مواصفات JSP 2.0 لكتابة هذه العلامات المخصصة.
يمكنك وراثة فئة SimpleTagSupport وتجاوز طريقة doTag() لتطوير أبسط علامة مخصصة.
بعد ذلك، نريد إنشاء علامة مخصصة تسمى <ex:Hello> بالتنسيق التالي:
<على سبيل المثال: مرحبًا />
لإنشاء علامات JSP مخصصة، يجب عليك أولاً إنشاء فئة Java التي تتعامل مع العلامات. لذلك، دعونا نقوم بإنشاء فئة HelloTag على النحو التالي:
package com.tutorialspoint;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;import java.io.*;public class HelloTag يمتد SimpleTagSupport { public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.println("مرحبًا بالعلامة المخصصة!" }});
تعيد التعليمة البرمجية التالية كتابة طريقة doTag()، التي تستخدم طريقة getJspContext() للحصول على كائن JspContext الحالي وتمرير "Hello Custom Tag!" إلى كائن JspWriter.
قم بتجميع الفئة أعلاه ونسخها إلى دليل CLASSPATH لمتغير البيئة. وأخيرًا، قم بإنشاء مكتبة العلامات التالية: <دليل تثبيت Tomcat> webappsROOTWEB-INFcustom.tld.
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>مثال لنطاق المستوى الأعلى</short-name> <tag> <name>مرحبًا</name > <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>فارغ</body-content> </tag></taglib>
بعد ذلك، يمكننا استخدام علامة Hello في ملف JSP:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>نموذج علامة مخصصة</title> </head> <body> <ex:Hello /> </body></html>
مخرجات البرنامج أعلاه هي:
مرحبًا بالعلامة المخصصة!
يمكنك تضمين محتوى الرسالة في العلامات تمامًا مثل مكتبة العلامات القياسية. إذا أردنا تضمين محتوى في Hello المخصص لدينا، فسيكون التنسيق كما يلي:
<ex:Hello> هذا نص الرسالة</ex:Hello>
يمكننا تعديل ملف فئة معالجة الملصقات، ويكون الكود كما يلي:
package com.tutorialspoint;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;import java.io.*;public class HelloTag Extends SimpleTagSupport { StringWriter sw = new StringWriter(); ) يطرح JspException، IOException { getJspBody().invoc(sw); getJspContext().getOut().println(sw.toString()); }}
بعد ذلك نحتاج إلى تعديل ملف TLD كما يلي:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>مثال لنطاق المستوى الأعلى مع نص</short-name> <tag> <name>مرحبًا< /اسم> <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>scriptless</body-content> </tag></taglib>
يمكننا الآن استخدام العلامة المعدلة في JSP كما هو موضح أدناه:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>نموذج علامة مخصصة</title> </head> <body> <ex:Hello > هذا هو نص الرسالة </ex:Hello> </body></html>
مخرجات البرنامج أعلاه هي كما يلي:
هذا هو نص الرسالة
يمكنك تعيين سمات مختلفة في المعايير المخصصة لتلقي السمات، يجب أن تقوم فئة العلامة المخصصة للقيمة بتنفيذ طريقة الضبط في JavaBean كما يلي:
package com.tutorialspoint;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;import java.io.*;public class HelloTag يمتد SimpleTagSupport { رسالة سلسلة خاصة; public void setMessage(String msg) { this.message = msg; } StringWriter sw = new StringWriter(); JspException, IOException { if (message != null) { /* استخدم الرسالة من السمة */ JspWriter out = getJspContext().getOut(); out.println( message } else { /* استخدم الرسالة من نص المحتوى */ getJspBody().invoc(sw); getJspContext().getOut().println(sw.toString()); }}
اسم الخاصية هو "message"، لذا فإن طريقة الضبط هي setMessage(). الآن دعونا نضيف هذه السمة في عنصر <attribute> المستخدم في ملف TLD:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>مثال لنطاق المستوى الأعلى مع نص</short-name> <tag> <name>مرحبًا< /اسم> <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>message</name> </attribute> </tag></taglib>
يمكننا الآن استخدام سمة الرسالة في ملف JSP على النحو التالي:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>نموذج علامة مخصصة</title> </head> <body> <ex:Hello message="هذه علامة مخصصة" /> </body></html>
نتيجة الإخراج لبيانات المثال أعلاه هي:
هذه علامة مخصصة
يمكنك أيضًا تضمين السمات التالية:
ملكية | يصف |
---|---|
اسم | يحدد اسم السمة. يجب أن يكون اسم السمة فريدًا لكل علامة. |
مطلوب | يحدد ما إذا كانت السمة مطلوبة أم اختيارية. إذا تم تعيينها على خطأ، فهي اختيارية. |
com.rtexprvalue | يعلن ما إذا كانت سمة التسمية صالحة عند تشغيل التعبير. |
يكتب | نوع فئة Java الذي يحدد هذه الخاصية. الافتراضي المحدد كسلسلة |
وصف | معلومات الوصف |
جزء | إذا تم الإعلان عن هذه السمة، فسيتم التعامل مع قيمة السمة على أنها JspFragment . |
فيما يلي مثال على تحديد الخصائص ذات الصلة:
..... <attribute> <name>attribute_name</name> <required>false</required> <type>java.util.Date</type> <fragment>false</fragment> </attribute>.. ...
إذا كنت تستخدم كلا السمتين، فقم بتعديل ملف TLD كما يلي:
..... <attribute> <name>attribute_name1</name> <required>false</required> <type>java.util.Boolean</type> <fragment>false</fragment> </attribute> <attribute > <name>attribute_name2</name> <required>true</required> <type>java.util.Date</type> </attribute>.....