جافا الدعامات 1: إلى الأمام من العمل إلى العمل. تمرير البيانات من خلال ActionForms

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

  •  21-08-2019
  •  | 
  •  

سؤال

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

والمشكلة هي أن ActionTo بطباعة قيمة غير صحيحة -. commonInt لها له قيمة افتراضية من 0، في حين نتوقع 35

وهنا مثال تمثل:

public class ActionFrom extends DispatchableAction{

    public ActionForward send(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response){
        FormA formA = (FormA)form;

        formA.commonInt = 35;
        System.out.println("sent: "+formA.commonInt);
        return mapping.findForward("send");
    }
}

public class ActionTo extends DispatchableAction{

    public ActionForward recv(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response){
        FormB formB = (FormB)form;

        System.out.println("recv= "+formB.commonInt);

        return mapping.findForward("send");
    }
}

وactionForms هي:

public class FormA extends ActionForm {
    public int intA;
    public int commonInt;
}

public class FormB extends ActionForm{
    public int intB;
    public int commonInt;
}

وتعيينات:

<action path="/from" type="EXPERIMENT.ActionFrom" name="formA" scope="request"
      input="something.jsp" parameter="dispatch" unknown="false" validate="false">
 <forward  name="send" path="/to.do?dispatch=recv" redirect="false"/>
</action>

 <action path="/to" type="EXPERIMENT.ActionTo" name="formB"  scope="request"
      input="something.jsp" parameter="dispatch" unknown="false" validate="false">
      <forward name="send" path="/login.do"  redirect="false"/>
 </action>

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

وكان الحل حاولنا أن تمر الأمور من خلال طلب، ولكن يمكن الحصول على الكبير والفوضى.

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

المحلول

والطريق إلى تحقيق ذلك هو استخدام نفس actionform لكل من الإجراءات. هل هناك سبب معين لماذا تحتاج اثنين actionforms مختلفة؟ إن لم يكن محاولة تعديل رسم الخرائط الإجراء الثاني إلى اسم = "الشكل" والعمل في حد ذاته لاستخدام الشكل بدلا من FormB.

نصائح أخرى

وتوم، وذلك باستخدام لكم الحل والجمع مع ActionRedirect ، الذي اقترحه فنسنت Ramdhanie، حصلت على ما تريد أيضا.

والرمز هو البساطة وتتيح لك الحصول على أشكال فصل لكل عمل.

ActionRedirect redirect = new ActionRedirect(mapping.findForward("send"));
redirect.addParameter("commonInt", formA.getCommonInt());
return redirect;
formB.setCommonInt(request.getParameter("commonInt"));

وهذا endend المطاف إنقاذ بلدي اليوم ومساعدتي ليس لديهم محاولة لتغيير ذلك مباشرة في JSP، ماذا سيكون مروعا.

ويبدو مثل هذا يمكن أن تحصل الفوضى، ويهمني ان تبقي هذه بسيطة واستخدام ActionForm فقط لتخزين البيانات Request.

public class FormA extends ActionForm {
    public int intA;
    public int commonInt;
}

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

public class ActionTo extends DispatchableAction {
  public ActionForward recv(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) {
    FormA form = (FormA)form;

    DataHolder dataHolder = request.getSession().getAttribute("dataHolder");
    dataHolder.setCommonInt(commonInt);
    dataHolder.setIntA(intA);

    return mapping.findForward("send");
  }
}

ومن الناحية المثالية، إذا كنت لم تستثمر بكثافة في الدعامات 1 فما استقاموا لكم فاستقيموا نلقي نظرة على الدعامات 2.

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