سؤال

ولدي سؤال حول كومة قيمة struts2. دعنا نقول لدي الطبقة العمل يسمى RegisterAction يحتوي على تنفيذ الأسلوب كما يلي:

public String execute() {
    ValueStack stack = ActionContext.getContext().getValueStack();
    stack.push(new String("test string"));
    return SUCCESS;
}

وبلدي struts.xml يبدو مثل هذا:

<struts>
    <package name="default" extends="struts-default">
        <action name="*Register" method="{1}" class="vaannila.RegisterAction">
            <result name="populate">/register.jsp</result>
            <result name="input">/register.jsp</result>
            <result name="success">/success.jsp</result>
        </action>        
        <action name="*Test" method="{1}" class="vaannila.TestAction">
            <result name="test">/test.jsp</result>
            <result name="success">/success2.jsp</result>
        </action>        
    </package>
</struts>

وبالتالي، فإن التحكم سوف تتدفق إلى success.jsp بعد تنفيذ تنفيذ الأسلوب في تلك الفئة.

وأسئلتي هي:

1) كيف يمكنني الحصول على هذه القيمة لقد ضغطت على المكدس في success.jsp؟

2) دعونا نقول في success.jsp لدي <s:submit method="testMethod" /> أن الموجهات إلى فئة العمل يسمى TestAction. وبعبارة أخرى، من صفحة التسجيل، يقوم المستخدم بالنقر تقدم، وفي طريقة تنفيذ من RegisterAction ندفع "سلسلة اختبار" على المكدس. ثم نذهب إلى success.jsp. وsuccess.jsp يحتوي على زر تقديم هذا يوجهنا إلى TestAction#testMethod. في TestAction#testMethod، هو القيمة لقد ضغطت على المكدس في RegisterAction#execute لا يزال هناك؟ كيف يمكنني الحصول عليه؟ I خرج من المصحح الكسوف ولكن لا أرى القيمة.

وشكرا.

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

المحلول

وطيب، وأنا أحسب ذلك.

1) الطريق وجدت للحصول على الكائنات على كومة قيمة حتى نتمكن من الوصول إليها من التخطيط الاستراتيجي المشترك مثل هذا:

Map<String, Object> context = new HashMap<String, Object>();
context.put("key", "some object");
context.put("key2", "another object");
ActionContext.getContext().getValueStack().push(context);

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

<s:property value="key" />
<s:property value="key2" />

ووسوف ننظر من خلال كومة قيمة والعثور على تلك القيم في HashMap دفعنا.

2) ويرتبط مثيل الطبقة العمل مع طلب واحد فقط. لذلك عندما نذهب إلى إجراء آخر ثم في نهاية المطاف في التخطيط الاستراتيجي المشترك آخر، والاشياء دفعنا على المكدس قيمة من أول عمل لن يكون هناك منذ إجراء آخر وانها كومة القيمي. إشارة: http://www.manning-sandbox.com/thread.jspa؟messageID = 93045

ويا رفاق يمكن أن لا تتردد في تصحيح لي إذا كان أي من هذا هو خاطئ أو إذا كانت هناك طرق أكثر ذكاء للقيام بهذه الأمور:)

وشكرا.

نصائح أخرى

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

.

وA CRUD البرنامج التعليمي: HTTP: //struts.apache كافيه / 2.1.6 / مستندات / الخام-التجريبي i.html

ومجرد تعريف خاصية مثل

String string1 = "test string";

وفي العمل الخاص بك.

وفي التخطيط الاستراتيجي المشترك يمكنك الوصول إليها مباشرة.

ومنها مثلا

 <s:property value="string1"/>

وسوف تطبع

<اقتباس فقرة>   

و"سلسلة اختبار"

وعادة، كما يقول نيت، سوف تستخدم حقل في العمل الخاص بك، لأن العمل هو دائما على ValueStack. ومع ذلك، هذا لا يعمل إذا كنت كتابة التعليمات البرمجية اعتراضية منذ ستزول اعتراضية في الوقت الذي يتم استدعاء قالب (JSP / freemarker الخ). هناك تحتاج إلى وضع نوع من جافا كائن مثل الفول على ValueStack، تماما كما تفعل أعلاه.

ومرحبا فقط للحصول على معلومات

وهذه هي كانت السلبي لاستخدام getValueStack().getContext() أحيانا البيانات غير متوفرة في .ftl (بيانات كان لا يظهر في line2، ولكن كانت قادمة في LINE1) أنا حقا لا أعرف السبب في ذلك. ولكن باستخدام .getValueStack().set("resDTO",resDTO); تم حل المشكلة (تم الحصول على ملؤها البيانات لكل من وظائف).

 ${resDTO.data} //line 1
var selonload='<@s.property value="resDTO.data" escape="false" />'; //line 2
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top