سؤال

أريد أن أضع بعض ملفات JavaScript في إحدى الحزم الخاصة بي وجعل الدعامات تخدمها مثل /struts/js/foo.js

تقوم الدعامات بذلك للملفات في حزمة "Template" (هذا هو المكان الذي توجد فيه ملفات JQuery Plugin ، محمية struts.ui.templateDir اختيار). ومع ذلك أريد وضع هذه الملفات في حزمة أخرى ؛ إذا قمت بإعادة تعريف struts.ui.templateDir ثم تتوقف الدعامات عن العمل لأنه لا يمكن العثور على قوالبها.

لذا فإن السؤال هو: كيف تخبر الدعامات لخدمة الملفات في org.foo.some.package.js مثل /struts/js/whatever.js?

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

المحلول

يمكن أن يقدم Struts2 محتوى ثابتًا خارج الصندوق. بشكل افتراضي يتم تقديم المحتوى الثابت بواسطة DefaultStaticContentLoader تنفيذ StaticContentLoader. يبحث تلقائيًا في الحزم التالية:

  • org.apache.struts2.static
  • نموذج
  • ثابتة
  • org.apache.struts2.Interceptor.Debugging

يمكنك إضافة حزم إضافية ليتم البحث عنها في معلمة Filter Init المسماة "الحزم".

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
    <init-param>
        <param-name>packages</param-name>
        <param-value>some.package another.one</param-value>
    </init-param>
</filter>

يمكنك إضافة أكثر من حزمة واحدة ، أو استخدام الفاصلة أو المساحة أو علامة التبويب أو سطر جديد كفاصل.

راجع للشغل يمكنك التحكم في ما إذا كان يتم تخزين المحتوى الثابت من قبل متصفح أم لا مع هذا الثابت:

struts.serve.static.browserCache

نصائح أخرى

طريقة واحدة هي تمديد القالب بأكمله وتغيير templatedir كما اقترحت بالفعل. ما لم يحتاج المرء إلى تنفيذ قالب مخصص ، فهذا أمر مفرط للغاية.

لكن أفضل طريقة هي أن تنسى /struts/js/foo.js واستخدم أي عنوان URL آخر لتحميل JS.

عينات قليلة:

JSP

WebPages
    |-->myjs.js         (a normal js file)
    |-->mydynamicjs.jsp (a .jsp file containing ONLY javascript code)
    |-->WEB-INF-->xyz.js (another .js file but accessed only through action)

الدعامات

<action name="myacctionjs">
    <result>/WEB-INF/xyz.js</result>
</action>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top