بما في ذلك JSP صفحة إلى آخر صفحة JSP, كيفية تجنب متعددة رئيس / هيئة أقسام ؟
-
12-09-2019 - |
سؤال
وأود أن تشمل JSP صفحة إلى آخر صفحة JSP.لنفترض أن لدي master.jsp
هذا هو بما في ذلك slave.jsp
.
كما slave.jsp
الخاصة <head>
قسم التعامل مع جافا سكريبت و CSS, هل هناك طريقة أو ربما طريقة أخرى لدمج master
و slave
رئيسs القسم إلى واحد واحد ؟ أيضا نفس الشيء يجب فعله من أجل الجسمs القسم.
لقد تم استخدام sitemesh في الآونة الأخيرة ولكن أعتقد أنه من غير العملي تماما لإعداد قالب لكل صفحة.
المحلول
ذهبت لهذا الحل عن طريق تمرير معامل عند بما في ذلك الصفحة.
في master.jsp.
<head>
blablabla
<c:import url="slave.jsp">
<c:param name="sectionName" value="HEAD" />
</c:import>
</head>
<body>
blablabla
<c:import url="slave.jsp">
</c:import>
</body>
ثم في slave.jsp. تتم قراءة المعلمة والجزء المخصص من الصفحة.
<c:choose>
<c:when test="${param.sectionName == 'HEAD'}">
head section here [without the <HEAD> tags !]
</c:when>
<c:otherwise>
body section here [without the <BODY> tags !]
</c:otherwise>
</c:choose>
ليس لطيفا جدا أن نرى ولكن العمل. بهذه الطريقة أنا قادر على إزالة ازدواج HEAD
و BODY
القطع.
نصائح أخرى
لا يمكنك ويجب عدم دمج اثنين <html>
المستندات في بعضها البعض. هذا من شأنه أن ينتج إخراج غير صالح. أفضل تشمل CSS / JS بشكل مشروط بمساعدة jstl. c:if
أو c:choose
العلامات.
المثال الأساسي:
<head>
<script type="text/javascript" src="global.js"></script>
<c:if test="${isAdminPage}">
<script type="text/javascript" src="admin.js"></script>
</c:if>
</head>
خارج خريطة الموقع، أنت بعيد جدا من الحظ. ومع ذلك، أود إعادة النظر في التصميم الخاص بك إذا كنت تعتقد أن الإعداد لكل صفحة غير عملي. كم عدد الصفحات التي ستحصل عليها التطبيق؟
هل يمكن أيضا تمديد مشروط الخيار ، وجعل meta.jsp
(على سبيل المثال) ، والذي يحتوي على Map
لكل من رئيس العناصر - العلامات الفوقية, css hrefs, النصي hrefs ، واستخدام اسم jsp رئيسيا في تلك الخريطة.ثم اتصل request.getRequestURI()
, وتظهر كل ما كنت قد وضعت في الخريطة تحت هذا المفتاح.لا جميلة جدا الحل ، ولكن العامل.