سؤال

يمكنني تعيين خاصية على ValueStack في عدة طرق.

 ValueStack stack = ActionContext.getContext().getValueStack();
 stack.getContext().put("resultDTO",resultDTO);  //1. creates a different branch 
 //parallel to root

 stack.set("resultDTO", resultDTO); //2. pushes on root as a Map?
 stack.push(resultDTO); //3. pushes on root
 myActionClass.setProperty(); //4. normal action accessor

أحتاج إلى أن أكون قادرًا على استعادة كل هذه القيم مرة أخرى في JSP وfreemarker وjava like

 stack.findValue() or stack.findString().    

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

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

لدي شك آخر حول الوصول في JSP

 <s:push value="resultDTO" ><s:property value="data.form1[0]" /></s:push>
 <!--5.works for context.put() & stack.set() both-->

 <s:property value="#resultDTO.data.form1[0].countryofissue" /> <!--6.context.put()-->
 <s:property value="resultDTO.data.form1[0].countryofissue" />  <!--7.stack.set()-->
 <s:property value="data.form1[0].countryofissue" />            <!--8.stack.push()-->

أريد أيضًا أن أعرف كيف تعمل النقطة الخامسة في كليهما stack.getContex().put() و stack.set()؟أنا أفهم أنه في السادس resultDTO أنا أقوم بالوصول، وهو جذر مختلف وفي السابع، هو ابن الجذر الافتراضي، وهو ValueStack.في الثامن يبدأ البحث من الجذر الافتراضي.

مررت http://struts.apache.org/2.0.11.1/docs/ognl.html, http://struts.apache.org/2.1.2/struts2-core/apidocs/com/opensymphony/xwork2/util/ValueStack.html ومربكة بدلا من هذا الرابط http://www.opensymphony.com/ognl/html/DeveloperGuide/introduction.html#embeddingOGNL

بعد أن قلت كل هذا، فأنا لا أميل إلى استخدامه كثيرًا stack.getContext().put() الطريقة حيث يمكنني رؤية القيم بوضوح من خلال تعيين عنوان url كـ ?debug=browser.انصحوني إذا أخطأت.

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

المحلول

ال ValueStack هو لكل طلب.إذا قمت بوضع قيم على المكدس، فيمكن الوصول إليها لاحقًا في الطلب (أي في طبقة العرض)، ولكنها لن تنجو من إعادة التوجيه، وهو ما سيكون طلب HTTP جديدًا وله خاصيته ValueStack.

في ظل الظروف العادية، سيتم تعيين المعلمات في عنوان URL أو في منشور النموذج على الإجراء باستخدام طرق ضبط الإجراء.في المعترض، يمكنك إضافة قيم مباشرة إلى المكدس.على سبيل المثال، ExceptionMappingInterceptor يستخدم stack.push(Object) طريقة لنشر الاستثناءات للاستخدام على صفحات الخطأ.

  • stack.getContext().put(String, Object) - يضع المفتاح/القيمة في الخريطة الموجودة على المكدس.تمثل الخريطة سياق المكدس.
  • stack.set(String, Object) - يضع المفتاح/القيمة في الخريطة الموجودة على المكدس.لست متأكدًا من مدى ارتباط ذلك بالطريقة السابقة، بخلاف أنها خريطة مختلفة.
  • stack.push(Object) - يؤدي هذا إلى وضع الكائن على جذر المكدس.

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

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