سؤال

أعرف طريقتان لإضافة محتوى إلى <head> قسم الصفحة في الويكيت. يمكنك استخدام HeaderContributorS ويمكنك استخدام <wicket:head></wicket:head> في الجزء العلوي من HTML لوحة الويكيت الخاصة بك.

مشكلتي هي: أحتاج إلى إضافة علامات ميتا معينة إلى خاص صفحات موقعي لأغراض تحليلات الويب ، لكني بحاجة إلى الظهور قبل البرنامج النصي التحليلي الذي أدرجه في <head> قسم من كل صفحة. لدي صفحة تجريدية أساسية يتم تمديدها بواسطة كل صفحة أخرى. أرغب في تضمين البرنامج النصي التحليلي في الصفحة الأساسية وإضافة علامات التعريف في اللوحات الموجودة في الصفحات التي تمدده. ومع ذلك ، يضيف الويكيت افتراضيًا المحتوى الذي وضعته في <wicket:head></wicket:head> من تلك اللوحات بعد المحتوى المدرج في <head> قسم الصفحة الأساسية.

هل هناك طريقة لإخبار الويكيت بتعبئة ذلك <wicket:head></wicket:head> المحتوى بدلاً من إلحاقه؟

تحديث: أنا أستخدم WebTrends ، وليس Google Analytics ، والذي يتطلب نصين: واحد في head القسم وكذلك واحد في أسفل الصفحة.

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

المحلول

في الويكيت 1.5 ، هم التجربة مع مختلف IHeaderRenderStrategy التطبيقات ، مثل childfirsTheAderRendersTrategy (تجريبي) أو ParentFirSTheAderRendersTrategy (افتراضي). يبدو أن إعادة ترتيب مساهمات الرأس كانت مشكلة في 1.4 ، لذلك فهي تمسك بها.

ومع ذلك ، بالنسبة للويكيت 1.4 ، هناك نوع من الحل. والفكرة هي إعادة ترتيب قائمة السلوكيات (مساهمات الرأس ليست سوى سلوك آخر). كل مكون لديه محمية getBehaviors() الطريقة التي يمكن الكتابة فوقها. الحيلة هي العثور على السلوك الذي يتوافق مع ملف JS الخاص الذي يجب تضمينه أولاً. لقد فعلت ذلك عن طريق إنشاء مثيل خاص بي لكائن HeaderContribution ، لذلك يمكنني إجراء مقارنة مثيل ثم استخدام قائمة ArrayList لنقل كائن HeaderContribution من في منتصف قائمة السلوك إلى أعلى قائمة السلوك:

public abstract class BasePage extends WebPage {

public BasePage() {
    add(HeaderContributor.forJavaScript("foo-base.js"));
}

}

تضيف الصفحة الرئيسية البرنامج النصي الإضافي ، والذي ينبغي تقديمه أولاً. الصفحة الرئيسية أيضا الكتابة فوق طريقة gebehaviors ():

public class HomePage extends BasePage {

private static final long serialVersionUID = 1L;

private final HeaderContributor contrib = new HeaderContributor(
        new IHeaderContributor() {
    public void renderHead(IHeaderResponse response) {
        response.renderJavascriptReference("foo-first.js");
    }
});

public HomePage(final PageParameters parameters) {
    add(new Label("message", "If you see this message ..."));
    add(contrib);
}

@Override
protected List getBehaviors(Class type) {
    List behaviors = super.getBehaviors(type);
    ArrayList sortedBehaviors = new ArrayList(behaviors);
    boolean moveToTop = true;
    if (moveToTop) {
        if (!sortedBehaviors.remove(contrib)) {
            throw new IllegalStateException();
        }
        sortedBehaviors.add(0, contrib);
    }
    return sortedBehaviors;
}
}

الآن ، ستكون النتيجة النهائية هي أن البرنامج النصي الذي تمت إضافته بواسطة الصفحة الرئيسية يتم تقديمه أولاً ، ويأتي البرنامج النصي الذي تمت إضافته بواسطة Baspage بعد ذلك.

<html xmlns:wicket="http://wicket.apache.org/... >
<head>  
    <title>Wicket Quickstart Archetype Homepage</title>
<script type="text/javascript" src="foo-first.js"></script>
<script type="text/javascript" src="foo-base.js"></script>
</head>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top