سؤال

هل هناك طريقة لتكوين السرعة إلى استخدام شيء آخر غير toString () لتحويل كائن إلى سلسلة في القالب؟ على سبيل المثال، لنفترض أنا باستخدام فئة تاريخ بسيطة مع طريقة شكل ()، وأنا أستخدم نفس الشكل في كل مرة. وإذا كان كل من قانون بلدي سرعة يبدو مثل هذا:

$someDate.format('M-D-yyyy')

وهناك بعض التكوين ويمكنني أن أضيف أن من شأنه أن يسمح لي أن أقول

$someDate

وبدلا من ذلك؟ (على افتراض أنني لست في وضع يسمح لها فقط تحرير الطبقة تاريخ واعطائها toString المناسب ()).

وأنا أفعل هذا في سياق تطبيق الويب بنيت مع WebWork، اذا كان ذلك يساعد.

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

المحلول

ويمكنك أيضا إنشاء ReferenceInsertionEventHandler بنفسك أن الساعات للتواريخ ويفعل التنسيق بالنسبة لك تلقائيا.

نصائح أخرى

وسرعة يسمح لJSTL مثل أداة مساعدة تسمى velocimacros:

http://velocity.apache.org/engine/devel /user-guide.html#Velocimacros

وهذا من شأنه أن يسمح لك لتحديد ماكرو مثل:

#macro( d $date)
   $date.format('M-D-yyyy')
#end

وبعد ذلك يطلق عليه مثل ذلك:

#d($someDate)

وأوه، والإصدارات 1.6+ من سرعة يكون واجهة Renderable جديدة. إذا كنت لا تمانع في ربط الدرجة تاريخك إلى API السرعة، ثم تنفيذ هذه الواجهة وسوف سرعة استخدام طريقة تقديم (السياق، الكاتب) (لقضيتك، كنت مجرد تجاهل السياق واستخدام الكاتب) بدلا من toString ( ).

وأنا واجهت هذه المشكلة أيضا، وكنت قادرا على حلها على أساس <لأ href = "https://stackoverflow.com/questions/375128/configure-velocity-to-render-an-object-with-something- عدا عن tostring / 505297 # 505297 "> ناثان Bubna الجواب .

وأنا مجرد محاولة لاستكمال الإجابة توفير تصل إلى سرعة الوثائق وهو ما يفسر كيفية استخدام EventHandlers.

في حالتي، أنا في حاجة المكالمات السرعة "getAsString" بدلا من أسلوب toString لكافة الكائنات JsonPrimitive من مكتبة gson كل الوقت الذي تم إدراج إشارة.

وكان بسيطا مثل إنشاء

public class JsonPrimitiveReferenceInsertionEventHandler implements ReferenceInsertionEventHandler{

    /* (non-Javadoc)
     * @see org.apache.velocity.app.event.ReferenceInsertionEventHandler#referenceInsert(java.lang.String, java.lang.Object)
     */
    @Override
    public Object referenceInsert(String reference, Object value) {
        if (value != null && value instanceof JsonPrimitive){
            return ((JsonPrimitive)value).getAsString();
        }
        return value;
    }

}

وإضافة الحدث إلى VelocityContext

vec = new EventCartridge();
vec.addEventHandler(new JsonPrimitiveReferenceInsertionEventHandler());

...

context.attachEventCartridge(vec);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top