سؤال

أنا أقوم ببناء تطبيق ويب MVC الربيع مع البلاط / JSP كقميات عرض. سابقا تخزين المسارات للصور الشائعة في الفصل الشائع:

 public final static String IMG_BREADCRUMBS_NEXT = "/shared/images/famfam/bullet_arrow_right.png";

ثم أود استخدام هذه الفئة في JSP للحصول على الصورة SRC

 <img src="<%= Common.IMG_BREADCRUMBS_NEXT %>"/>

أرغب في التخلص من Scriptlets في رمز JSP الخاص بي واستخدم JSTL وما إلى ذلك. ما هي أفضل طريقة لتخزين هذا النوع من المعلومات؟ هل حزم الموارد؟ كيف حلت هذا؟

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

المحلول

في النهاية استخدمت دعم موضوع الربيع لتحقيق ما أردت. في رمز العرض الخاص بي أستخدم <spring:theme code=""/> علامة للحصول على المسار إلى ملف الصورة:

 <img src="<spring:theme code="theme.images.actions.edit.link"/>" />

هذه العلامة تتصرف مثل أي <fmt:message> أو <spring:message> علامة، ولكن لديها "حزم الرسائل" الخاصة بها. التكوينات اللازمة في التطبيق الخاص بي هي:

 <!-- 
    ========================================================= 
    Themes
    =========================================================
  -->
<bean id="themeResolver" class="org.springframework.web.servlet.theme.SessionThemeResolver">
    <property name="defaultThemeName" value="themes.default"/>
</bean>
<bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource" />    

يتم تخزين جميع مواضيع طلبي تحت /WEB-INF/classes/themes/. وبعد خصائص السمة الافتراضية في /WEB-INF/classes/themes/default.propertiesتبدو هكذا:

 ...
 theme.images.actions.show.link=/@contextPath@/shared/images/famfam/zoom.png
 theme.images.actions.delete.link=/@contextPath@/shared/images/famfam/cross.png
 ...

لتغيير موضوع (وأيقونات) من التطبيق الخاص بي، أستخدم Thechangeinterceptor (في ApplicationContext)

<!--
========================================================= 
Theme resolving
=========================================================
--> 
<bean id="themeChangeInterceptor" class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
    <property name="paramName" value ="theme" />
</bean>

هذا يتيح للمستخدم إيقاف تشغيل السمة عبر "&theme=themes.default" أو "&theme=themes.alternative" طلب المعلمة.

جزء رئيسي واحد من الإعداد الخاص بي هو @contextPath@ في ملف خصائص الموضوع. يتم استبدال ذلك أثناء عملية بناء النمل مع مسار السياق الصحيح لبيئة التطوير / الاختبار / الإنتاج. الجزء الرئيسي من build.xml هو:

    <!-- copy all common themes to classes -->
    <copy todir="${build.war}/WEB-INF/classes/themes" overwrite="true" filtering="true">
        <fileset dir="resources/themes" includes="**/*.properties" />
        <filterchain>
           <replacetokens>
                <token key="contextPath" value="${setup.contextPath}"/>
            </replacetokens>
        </filterchain>
    </copy>

آمل أن يمنحك هذا "بدء تشغيل" في سمات تطبيقات الويب الربيعية. في رأيي، هذا الإعداد يجعل من السهل جدا تغيير مظهر ويشعر طلبا.

مراجع:

نصائح أخرى

استخدام فاصولي التكوين في نطاق التطبيق، حتى تتمكن من كتابة شيء مثل

<img src="${configuration.imagePath}/icon.png">

لا أستخدم الربيع، ولكن ربما يمكنك استخدام حقن التبعية للقيام بشيء مماثل لما نفعله في JBOSS و Seam.

في الأساس، لدينا فئة POJO تسمى التكوين الخاص بخصائصها معلمات تكوين التطبيقات، تم تحميلها من تكوين XML (في الواقع ل JBOSS MBEAN، ولكن هذا خارج الموضوع). في هذا المثال، سيكون لدى فولنا getImagePath() طريقة.

سيعتني التماس بمثابة مثيل واحد من فاصولي التكوين في نطاق "التطبيق"، بحيث يكون متاحا دائما للاستخدام في التعبيرات، مثل واحد أعلاه.

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

هل سيكون من الممكن القيام بذلك واستخدام مواضيع الربيع في نفس الوقت، لحفظ السمة في جلسة المستخدمين؟

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