هل يمكن تضمين jsp في فئة TagSupport مخصصة وتحديد المكان الذي يجب أن يذهب إليه النص؟

StackOverflow https://stackoverflow.com/questions/533405

  •  22-08-2019
  •  | 
  •  

سؤال

أريد استخدام علامات jsp مخصصة للمساعدة في إنشاء قائمة في تطبيقي.ومع ذلك، أريد أن يتم حفظ كل HTML الفعلي في ملفات JSP، وليس في فئة Java.

لذا، لنفترض أن لدي علامة مثل هذا:

<mytags:Menu>
  <mytags:MenuItem name="foo"/>
  <mytags:MenuItem name="bar"/>
  <mytags:MenuItem name="baz"/>
</mytags:Menu>

قد يكون لدي فصل دراسي خاص بي Menu العلامة، التي تبدو كالتالي:

public class MenuPill extends TagSupport {
    public int doStartTag() throws JspException {
        try {
            pageContext.include("/menu/menu.jsp");
        } catch (ServletException e) {
            throw new JspException(e);
        } catch (IOException e) {
            throw new JspException(e);
        }
        return super.doStartTag();
    }
}

لي menu.jsp الملف، وهو غلاف القائمة نفسها، قد يبدو كما يلي:

<div id="menu>
  <%somehow include the body here%>
</div>

ما أريد القيام به هو وضع جسدي mytags:Menu العلامة، والتي ستقوم بإنشاء HTML لعناصر القائمة الفعلية، في ملف menu.jsp, بين علامتي الفتح والإغلاق.أعلم أنه يمكنني تقسيمه إلى ملفين jsp مختلفين، أحدهما لعلامة البداية والآخر لعلامة النهاية، لكن هذا يبدو قذرًا.

هل من الممكن أن تفعل هذا؟

شكرًا!

هل كانت مفيدة؟

المحلول

وأنا حقا نقترح عليك استخدام التخطيط الاستراتيجي المشترك 2.0 ملفات العلامة بدلا من ذلك النهج يوحي لك. تم إنشاء التخطيط الاستراتيجي المشترك الملفات 2.0 دلالية لمعالجة المشاكل مثل واحد تصفون. جنبا إلى جنب مع JSTL (والطبقات ربما جافا لو كان معقدا حقا)، يجب أن تكون قادرة على تحقيق الغاية نفسها ولكن مع وسائل أنظف بكثير، مع فصل أجمل بكثير من التعليمات البرمجية والعرض.

نصائح أخرى

إذا كل صفحة في تطبيق الويب الخاص بك يحتاج إلى نفس القائمة، ثم هل يمكن أن تنظر بلاط ، لتحديد < وأ href = "http://tiles.apache.org/framework/tutorial/pattern.html" يختلط = "نوفولو noreferrer"> مركب المشاهدات

يمكنك إنشاء علامة مخصصة مثل...

template.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
  <tlib-version>1.0</tlib-version>
  <short-name>template</short-name>
  <uri>/template</uri>
  <tag-file>
    <name>block</name>
    <path>/META-INF/tags/template/block.tag</path>
  </tag-file>
  <tag-file>
    <name>stringBlock</name>
    <path>/META-INF/tags/template/stringBlock.tag</path>
  </tag-file>
</taglib>

تطبيق

<%@tag import="org.mentawai.template.*" pageEncoding="UTF-8"%>
<%@attribute name="id" required="true"%>

<%
  Page page = (Page)request.getAttribute(TemplateServlet.PAGE_ATTR);
  Page block = page.getBlock(id);
  String view = "";
  if (block == null) {
      throw new ServletException("Block " + id + " doesn't exists");
  }
  request.setAttribute(TemplateServlet.PAGE_ATTR, block);
  view = block.getView();
  TemplateServlet.executeListener(block, request, response, application);

  String oldView = (String)request.getAttribute("_view");
  request.setAttribute("_view", "/" + view);
%>

<jsp:include page="${_view}" flush="true"/>

<%
  request.setAttribute("_view", oldView);
  request.setAttribute(TemplateServlet.PAGE_ATTR, page);
%>

مرجع:http://docs.Oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top