كيفية إجراء عمليات إعادة توجيه URL الديناميكية في Struts 2؟

StackOverflow https://stackoverflow.com/questions/173846

  •  05-07-2019
  •  | 
  •  

سؤال

أحاول أن أقوم بإعادة توجيه تطبيق Struts2 إلى عنوان URL الذي تم إنشاؤه.في هذه الحالة، أريد أن يستخدم عنوان URL التاريخ الحالي، أو التاريخ الذي بحثت عنه في قاعدة البيانات.لذا /section/document يصبح /section/document/2008-10-06

ما هي الطريقة الأفضل لعمل هذا؟

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

المحلول

وهنا هو كيف نفعل ذلك:

في Struts.xml، لديها نتيجة حيوية مثل:

<result name="redirect" type="redirect">${url}</result>

في العمل:

private String url;

public String getUrl()
{
 return url;
}

public String execute()
{
 [other stuff to setup your date]
 url = "/section/document" + date;
 return "redirect";
}

ويمكنك فعلا استخدام هذه التكنولوجيا نفسها لتعيين قيم ديناميكية لأي متغير في struts.xml باستخدام OGNL. لقد خلق كل أنواع النتائج الحيوية بما في ذلك أشياء مثل وصلات مريحة. بارد الاشياء.

نصائح أخرى

واحد ويمكن أيضا استخدام annotations واتفاقية المكونات في لتجنب تكوين المتكررة في struts.xml:

@Result(location="${url}", type="redirect")

وو$ {رابط} يعني "استخدام قيمة طريقة getUrl القيمة"

إذا كان أي شخص يريد توجيه مباشرة في ActionClass:

public class RedirecActionExample extends ActionSupport {
HttpServletResponse response=(HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);

    url="http://localhost:8080/SpRoom-1.0-SNAPSHOT/"+date;
    response.sendRedirect(url);
    return super.execute(); 
}

وتحرير: أضيفت اقتباس المفقودين

وانتهى بي الأمر إن شاء subclasses ترث ServletRedirectResult الدعامات "وتجاوز انها طريقة doExecute() للقيام المنطق بلدي قبل استدعاء super.doExecute(). يبدو مثل هذا:

public class AppendRedirectionResult extends ServletRedirectResult {
   private DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

  @Override
  protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
    String date = df.format(new Date());
    String loc = "/section/document/"+date;
    super.doExecute(loc, invocation);
  }
}

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

ويمكنك إعادة توجيه لعمل آخر باستخدام الشرح -

@Result(
    name = "resultName",
    type = "redirectAction",
    params = { "actionName", "XYZAction" }
)

يمكن للمرء إعادة التوجيه مباشرة من المعترض بغض النظر عن الإجراء المتضمن.

في struts.xml

    <global-results>
        <result name="redir" type="redirect">${#request.redirUrl}</result>
    </global-results>

في المعترض

@Override
public String intercept(ActionInvocation ai) throws Exception
{
    final ActionContext context = ai.getInvocationContext();        
    HttpServletRequest request = (HttpServletRequest)context.get(StrutsStatics.HTTP_REQUEST);
    request.setAttribute("redirUrl", "http://the.new.target.org");
    return "redir";
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top