جزءا لا يتجزأ من العرف-الوسم في المحتوى الديناميكي (متداخلة الوسم) لا يرجع

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

  •  09-06-2019
  •  | 
  •  

سؤال

جزءا لا يتجزأ من العرف-الوسم في المحتوى الديناميكي (متداخلة الوسم) لا يرجع.

لدي صفحة تسحب المحتوى الديناميكي من التخطيط الاستراتيجي المشترك javabean ويمر قائمة الكائنات العلامة المخصصة للمعالجة إلى html.داخل كل كائن مجموعة من html إلى الإخراج الذي يحتوي على الثاني مخصص الوسم أود أيضا أن تكون المقدمة.المشكلة هي أن الوسم الاحتجاج قدم عادي.

على سبيل المثال قد تكون أفضل مني.

1 سحب المعلومات من قاعدة البيانات و العودة إلى الصفحة عن طريق التخطيط الاستراتيجي المشترك javabean.إرسال هذه المعلومات إلى العلامة المخصصة من أجل إخراج.

<jsp:useBean id="ImportantNoticeBean" scope="page" class="com.mysite.beans.ImportantNoticeProcessBean"/>  <%-- Declare the bean --%>
<c:forEach var="noticeBean" items="${ImportantNoticeBean.importantNotices}"> <%-- Get the info --%>
    <mysite:notice importantNotice="${noticeBean}"/> <%-- give it to the tag for processing --%>
</c:forEach>

هذه العلامة يجب إخراج صندوق شعبة مثل ذلك

*SNIP* class for custom tag def and method setup etc
out.println("<div class=\"importantNotice\">");
out.println("   " + importantNotice.getMessage());
out.println("   <div class=\"importantnoticedates\">Posted: " + importantNotice.getDateFrom() + " End: " + importantNotice.getDateTo()</div>");
out.println("   <div class=\"noticeAuthor\">- " + importantNotice.getAuthor() + "</div>");
out.println("</div>");
*SNIP*

وهذا يجعل ما يرام كما هو متوقع

<div class="importantNotice">
    <p>This is a very important message. Everyone should pay attenton to it.</p>
    <div class="importantnoticedates">Posted: 2008-09-08 End: 2008-09-08</div>
    <div class="noticeAuthor">- The author</div>
</div>

2 إذا في المثال أعلاه ، فعلى سبيل المثال ، لقد كانت مخصصة الوسم في importantNotice.getMessage() سلسلة:

*SNIP* "This is a very important message. Everyone should pay attenton to it. <mysite:quote author="Some Guy">Quote this</mysite:quote>" *SNIP*

المهم إشعار يجعل بخير ولكن الاقتباس الوسم لا يمكن معالجتها ببساطة إدراج في السلسلة و وضع نص عادي/html الوسم.

<div class="importantNotice">
    <p>This is a very important message. Everyone should pay attenton to it. <mysite:quote author="Some Guy">Quote this</mysite:quote></p>
    <div class="importantnoticedates">Posted: 2008-09-08 End: 2008-09-08</div>
    <div class="noticeAuthor">- The author</div>
</div>

بدلا من

<div class="importantNotice">
    <p>This is a very important message. Everyone should pay attenton to it. <div class="quote">Quote this <span class="authorofquote">Some Guy</span></div></p>    // or wahtever I choose as the output
    <div class="importantnoticedates">Posted: 2008-09-08 End: 2008-09-08</div>
    <div class="noticeAuthor">- The author</div>
</div>

أعرف أن هذا له علاقة مع معالجات ما قبل المعالجات ولكن أنا لست متأكدا حول كيفية جعل هذا العمل.

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

المحلول

فقط باستخدام

<bodycontent>JSP</bodycontent>

لا يكفي.عليك أن تفعل مثل soimething

JspFragment body = getJspBody(); 
StringWriter stringWriter = new StringWriter(); 
StringBuffer buff = stringWriter.getBuffer(); 
buff.append("<h1>"); 
body.invoke(stringWriter); 
buff.append("</h1>"); 
out.println(stringWriter);

للحصول على الداخلية العلامات المقدمة (على سبيل المثال هو SimpleTag doTag الأسلوب).

ومع ذلك ، في مسألة قانون أرى أن الداخلية الوسم قادم من سلسلة التي لم تقدم جزءا من التخطيط الاستراتيجي المشترك ، ولكن فقط بعض سلسلة عشوائية.أنا لا أعتقد أنك يمكن أن تجبر JSP مترجم إلى تحليل ذلك.

يمكنك استخدام regexp في قضيتك أو محاولة إعادة تصميم التعليمات البرمجية الخاصة بك في طريقة jsp مثل هذا:

<jsp:useBean id="ImportantNoticeBean" scope="page class="com.mysite.beans.ImportantNoticeProcessBean"/>
<c:forEach var="noticeBean" items="${ImportantNoticeBean.importantNotices}">
    <mysite:notice importantNotice="${noticeBean}">
        <mysite:quote author="Some Guy">Quote this</mysite:quote>
        <mysite:messagebody author="Some Guy" />
    </mysite:notice>
</c:forEach>

أنا وينبغي الذهاب مع regexp.

نصائح أخرى

وأنا أميل إلى تغيير "البنيان من علامات" في أن البيانات التي ترغب في تحقيق لا ينبغي أن يكون الوسم في داخل الصف كما هو "العلامات" تصميم الصفحة(على الرغم من الغموض فمن الممكن أن تحصل على تقييم البرنامج الموضوع من JSP بريمج المحرك).

ما سوف تجد على الأرجح أفضل وأكثر في إطار الإجراء العادي باستخدام "تتعاون فئة" مع BodyTagSupport فئة تمديد العودة EVAL_BODY_BUFFERED في doStartTag() طريقة لتكرار عملية الجسم و/أو كائن تقاسم مثل تخزين retrived البيانات في تطبيق التسلسل الهرمي الدورة أو الدورة للمستخدم.

انظر أوراكل j2ee العلامات المخصصة التعليمي للحصول على مزيد من المعلومات.

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