نقاط دخول متعددة في عمل الدعامات (Migration Struts 2.2.3 -> 2.3.1)
سؤال
لدي إجراء في struts.xml
<action name="reprint" class="reprintAction">
<result name="success" type="redirectAction">
<param name="actionName">reprint</param>
<param name="namespace">/x</param>
<param name="errorFlag">${errorFlag}</param>
<param name="message">${message}</param>
</result>
<result name="view">/jsp/reprintOverview.jsp</result>
</action>
جي إس بي:
<s:form action="reprint">
<s:select name="selectedPdfPrinter" list="shopPdfPrinterList" listKey="deviceId" listValue="deviceId" theme="simple"/>
<s:submit value="Print" theme="simple" method="shopPdfReprint"/>
</s:form>
مع عدة عناصر شكلية، كلها مرتبطة بفعل واحد.يحتوي كل نموذج على زر إرسال فردي برمز مميز method
(على سبيل المثال"shopPdfReprint").كل method
يتم تعيينه إلى طريقة في الفئة المقابلة.
كل شيء يعمل بشكل جيد مع Struts 2.2.3.ولكن بعد الترحيل إلى 2.3.1، لم يعد تعيين الطريقة يعمل.بدلاً من ذلك استدعاء الطريقة المقابلة (على سبيل المثال."shopPdfReprint")، فقط execute
- يتم استدعاء طريقة الفصل.
لقد نظرت إلى المستندات ، لكن للأسف لم أجد أدنى فكرة ، وكيفية التكيف مع 2.3.1 أي شخص واجه هذا؟المساعدة موضع تقدير :]
المحلول
يحدث هذا لأنك قمت بإيقاف تشغيل DMI.ال method
تعمل السمة مع علامة الإرسال كما كان من قبل حتى بعد إعادة إرسال الإصلاحات الأمنية.تمكين DMI باستخدام الثابت
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
اسمحوا لي أن أعرف إذا لم ينجح ذلك.
نصائح أخرى
إذا كان أي شخص يتحرك أو يعمل على Struts 2.5، فلن يحتاج إلى تعيين الإجراءات باستخدام struts.xml.يعتمد Strtus 2.5 على التعليقات التوضيحية، لذا يمكن للمطور في فئة الإجراء تعيين إجراءات متعددة داخل فئة واحدة باستخدام التعليق التوضيحي.
قد يكون هذا الرابط مفيدًا من إصدارات الدعامات القديمة إلى إصدار الدعامات 2.5.
https://struts.Apache.org/docs/struts-23-to-25-migration.html
فيما يلي الكود التجريبي البسيط.
package com.stsh.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import com.opensymphony.xwork2.ActionSupport;
import com.stsh.intercepter.AuthRequired;
@ParentPackage(value="default")
@Namespace(value="/dashboard")
public class DashboardAction extends ActionSupport implements AuthRequired{
private static final long serialVersionUID = 1L;
@Action(value = "home", results = { @Result(name = "success", location = "dashboard.tiles", type = "tiles") })
public String dashboard(){
return "success";
}
}