PDA

View Full Version : دستکاری کردن متغیرهای JSP در JavaScript



spiderman200700
چهارشنبه 13 مهر 1390, 21:51 عصر
سلام به همه یه سوال دارم که جوابش خیلی واسم حیاتیه.
من با JSP یه برنامه کوچیک نوشتم که در صفحه index، یه فرم وجود داره که این فرم فقط یه TextBox داره.
کاربر باید یه عدد داخل TextBox وارد کنه و دکمه ارسال رو بزنه.
اطلاعات به این صفحه ارسال میشه:

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%
int a = Integer.valueOf(request.getParameter("textbox"));
int s[] = new int[a];
for (int i = 1; i <= a; i++) {
s[i - 1] = i;
}
int i = 0;

%>
<script>
var tx=<%=a%>*1;
for(i=0;i<tx;i++){
alert("<%=s[i++]%>");
}
</script>

تو این صفحه یه آریه از نوع int با نام s و با طول عددی که از طرف کاربر ارسال شده و متغیر int با نام i ،ایجاد میشه.
بعد با استفاده از JavaScript یه حلقه For ایجاد میشه که کارش اینه که به تعداد طول آرایه، در یه alert ،مقدار i امین خانه از آرایه ی s رو نمایش بده و بعد از هر دفعه نمایش، i رو یه واحد افزایش بده.
مشکل اینه که i بعد از هر بار نمایش alert ، افزایش پیدا نمیکنه و هر دفعه فقط خانه اول آرایه نمایش داده میشه.
کسی میدونه این مشکل رو چطوری حل کنم؟
لطفا سریع جواب بدید.
ممنون از همه.

spiderman200700
جمعه 15 مهر 1390, 14:38 عصر
کسی نیست که با این مشکل مواجه شده باشه.
یکی یه جوابی بده لطفا.
این تالار های فناوری جاوا تو این سایت، چقدر بی حال شده.
لطفا کمکم کنید.خیلی حیاتیه واسم.
ممنون.

L u k e
شنبه 16 مهر 1390, 09:35 صبح
دقیقا متوجه نشدم
ولی تو Alert اون i++ واسه چیه ؟ یه بار که خوده حلقه ++ می کوندش یه بارم شما ؟
دوما اینکه شما 2 تا i تعریف کردین
و شما توی کد جاوا می خواهید از متغیر جاوا اسکریپتتون استفاده کنید ؟
می شه مگه
اون i در اصل اون i ه که شما تعریف کردن و صفر توش ریختین
سوما اون باید بشه i++ تا به مقدار متغیرتون اضافه بشه

spiderman200700
شنبه 16 مهر 1390, 12:33 عصر
ممنون از این که جوابی دادید.
درجواب این که میشه داخل جاوا اسکریپت از متغیر jsp استفاده کرد ، باید بگم بله. هر تگ jsp که یه خروجی به صفحه داشته باشه،میتونه به عنوان یه مقدار در داخل متغییر های جاوا اسکریپت ریخته بشه.

اون i که داخل تگ jsp تعریف شده با اون i که داخل تگ script تعریف شده فرق داره.
یعنی دستور :
<%=s[i++]%>
iامین خونه از آرایه ی s(که داخل تگ jsp تعریف شده) رو به تابع alert میده و متغیر i مربوط به تگ jsp رو ++ میکنه،ولی حلقه ی for ،اون i مربوط به جاوا اسکریپت رو ++ میکنه.
من میخوام داخل حلقه ای که با استفاده از جاوا اسکریپت تعریف کردم، هر دفعه که به متغیر حلقه یکی اضافه میشه،به متغیر jspیم که اسمش i هست هم یکی اضافه بشه.البته من تو تگ jsp به جای i اسم های دیگه ای هم به متغیرم دادم ولی بازم ++ نمیشه.

اگه بتونید این مشکل رو حل کنید خیلی خوشحالم میکنید.
ممنون.

L u k e
شنبه 16 مهر 1390, 13:02 عصر
آها منظورتون اون i ای که تو jsp هستش
باید این شکلیش کنید i++

spiderman200700
شنبه 16 مهر 1390, 19:11 عصر
اینی هم که میگید، قبل امتحان کردم.
اینجوری ++ میشه ، ولی فقط یه دفعه، اونم دفعه ی اول.
من میخوام هر بار که متغیر حلقه ی for ++ میشه ، متغیر i مربوط به JSPیم هم ++ بشه.
واقعا دیگه نمیدونم چیکار کنم.
دیونه شدم اینقدر دنبال راه حلش گشتم.:گریه:

L u k e
یک شنبه 17 مهر 1390, 09:36 صبح
ببخشید اصلا هواسم نبود این کد اصلا مشکل داره
روش های راهتتری هم وجود داره
چرا کلا از جاوا اسکریپت استفاده نمی کنید ؟

jReihane
یک شنبه 17 مهر 1390, 13:39 عصر
صفحه های jsp یه بار ساخته می شن و بعد از کد servlet تولید شده موقع کامپایل استفاده می شه. به این معنی که هر بار که صفحه رو load می کنین خطوط مربوط به jsp اجرا می شن, متغیر های jsp مقدار دهی می شن و....
نتیجه این می شه که حلقه for جاوااسکریپت باعث اجرا شدن مجدد کدهای jsp نمی شه. الان شما توی صفحه تون بار اول که لود می شه یکبار متغیر i رو مقدار دهی می کنین. بعد توی حلقه for جاوااسکریپت همون مقدار رو هربار استفاده می کنین. می تونین یه break point بذارین اونجا کهalert می کنین که ببینین فقط یک بار روش می ایسته. بنابراین روشتون اشتباهه. یا از اون آرایه ای که می گیرین یه نسخه js بسازین یا حلقه دوم رو هم با jsp بنویسین

spiderman200700
یک شنبه 17 مهر 1390, 16:32 عصر
صفحه های jsp یه بار ساخته می شن و بعد از کد servlet تولید شده موقع کامپایل استفاده می شه. به این معنی که هر بار که صفحه رو load می کنین خطوط مربوط به jsp اجرا می شن, متغیر های jsp مقدار دهی می شن و....
نتیجه این می شه که حلقه for جاوااسکریپت باعث اجرا شدن مجدد کدهای jsp نمی شه. الان شما توی صفحه تون بار اول که لود می شه یکبار متغیر i رو مقدار دهی می کنین. بعد توی حلقه for جاوااسکریپت همون مقدار رو هربار استفاده می کنین. می تونین یه break point بذارین اونجا کهalert می کنین که ببینین فقط یک بار روش می ایسته. بنابراین روشتون اشتباهه. یا از اون آرایه ای که می گیرین یه نسخه js بسازین یا حلقه دوم رو هم با jsp بنویسین
ممنون از جوابتون. فکر میکنم هنوز JSP رو به صورت مفهومی یاد نگرفتم.
بازم ممنون.


ببخشید اصلا هواسم نبود این کد اصلا مشکل داره
روش های راهتتری هم وجود داره
چرا کلا از جاوا اسکریپت استفاده نمی کنید ؟
شما درست میگی.روشهای ساده تری هم هست.
اتفاقا من توی این تایپک :
http://barnamenevis.org/showthread.php?-JavaScript (http://barnamenevis.org/showthread.php?308347-%D9%BE%D8%A7%D8%B3-%D8%AF%D8%A7%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D9%87-%DB%8C%D9%87-%D8%B5%D9%81%D8%AD%D9%87-JSP-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-JavaScript)
همین سوال رو پرسیدم.
اگه لطف کنید و جوابمو بدید ممنون میشم.

باتشکر