# فناوری جاوا > برنامه‌نویسی جاوا >  Struts

## Bahmany

سلام
چند وقت پیش تصمیم گرفته بودم که یک سری مطالبی از طریق چند کتابی که در حال مطالعه هستم در سایت قرار دهم .
با کمک دوستان در این تاپیک قصد دارم از Struts را بصورت کلی همراه با تعدادی Tutorial شروع کنم.



Struts چیست ؟
Struts برنامه ای مبتنی بر وب است که با زبان جاوا پیاده سازی شده است بوسیله این بستر یک برنامه مبتنی بر MVC فراهم می شود.
بهتر بگم که این برنامه ساختاری در اختیار تون می زاره که تا به راحتی بتونید یک برنامه MVC پیاده سازی کنید و همینطور این برنامه بسیاری از مشکلات پیاده سازی MVC رو رفع و سرعت و کیفیت اون رو بهتر کرده.

در این برنامه هر درخواست ( از سمت کاربر/Browser) بوسیله یک Object جاوا بنام Action گرفته و پردازش میشه در کلاس Action تمامی امکانات برای پاسخگویی به درخواست ها وجود داره حالا بعد از اینکه Action درخواست رو دریافت کرد و پردازش هایی که شما بهش گفتین رو انجام داد نتایج رو به ActionForm می فرسته و آخر صفحات JSP داده های ActionForm رو نشون می دن.
http://jakarta.apache.org/struts

----------


## Bahmany

کلاس Action : این کلاس برای پاسخگویی به درخواست تعریف و ساخته می شه و از 
org.apache.struts.action.Action مشتق میشه
و یک متد هم بنام execute داره که عملیات مورد نظر برای پاسخگویی بروی آن انجان میشه.

کلاس ActionForm : در این کلاس داده های فرستاده شده از سمت Action نگهداری و به صفحه JSP منتقل میشن و این کلاس نیز از کلاس org.apache.struts.action.ActionForm مشتق  میشه.

حالا زیاد نمی خوام وارد ریز توضیحات بشم توی تاپیک بعدی یک Tutorial مقدماتی رو شروع و شرح خواهم داد. 
دوستانی که می بیینند یک جای بحث مشکل داره ممنون میشم توی بحث شرکت کنند.

----------


## saeed_Z_F

سلام
خیلی خوب و عالیه استفاده می کینم . ممنون .

----------


## Bahmany

*اولین Tutorial  :*
کلاس Action که مسئولیت دریافت و پردازش داده های ActionForm و تولید داده های قابل نمایش را بر عهده دارد می تواند بسته به شرایط مختلف صفحات JSP مختلفی را نیز تولید کند.
در این Tutorial قصد دارم یک فرم Register ایجاد و داده های آن را به Action ارسال و نتیجه را بوسیله ActionForm ایجاد و در JSP نمایش دهیم.
متاسفانه همکنون هیچ IDE ندارم اگه جایی از کار مشکل داشت بگید تا اصلاحش کنم 

1- اولین کاری که می کنیم این است که از صحت نصب Struts اطمینان حاصل کنیم
-    اگر شما Netbean 5.5 استفاده می کنید این نرم افزار نیز اتوماتیک نصب می شود
-    اگر استفاده نمی کنید لینکی که در بالا معرفی کرده ام را دنبال کنید و آن را دانلود کیند
2- Netbean را شروع می کنیم
3- از منوی File – New Project پروژه جدیدی با موضوع Web Application آغاز می کنیم.
4- در همان Wizard مربوطه به New Web Application در مرحله سوم شما می توانید Struts را انتخاب کنید تا وب سایت شما از این امکان پشتیبانی کند.
5- خوب پروژه شما ساخته شد !! حالا شما یک پروژه با struts ساخته اید.
حالا کمی فایل هایی را که Netbeans اتوماتیک برای شما ساخته را نگاه کنید و سعی کنید اسامی فایل ها و پوشه هایی را که برای شما ایجاد کرده را مورد بررسی قرار دهید

*پوشه WEB-INF* 
در این پوشه تمامی تنظیمات وب سایت شما قرار خواهد گرفت میشه گفت یه چیزی مثل web-config در C#‎ ولی این (WEB-INF) کجا و اون (web-config) کجا.!
تمامی تبادلات بین Action ActionForm و JSP در فایل های موجود در این پوشه تنظیم می شوند. باید این رو بگم که کار در این پوشه و این فایل ها زیبایی و کارامدی خاصی داره که در پروژه های بزرگ خیلی می تونه کمک کننده باشه.

*فایل struts-config.xml :*
این فایل یک فایل xml است حاوی تنظیمات برنامه وب است.
خوب وقتی Browser درخواستی را به سمت سرور می فرستد این فایل آن درخواست را در اولین مرحله مورد بررسی قرار می دهد.
مثلا شما می روید شرکت XZY می گید آقا من با رئیس قسمت ثبت نام کار دارم و بعد نگهبان میره و آقای رئیس قسمت که نامش آقای Jack.jsp هست رو میاره.
مثلا شما به سمت وب سرور درخواست Boss.do رو می فرستید وقتی struts این درخواست رو می گیره از struts-config می خواد که یه بلایی سر این دستور بیاره بعد struts-config به اندرون خودش مراجعه می کنه که ببینه شما چی براش تعریف کردید بعد می بینه که شما گفتید آقا Boss اگه اومد فلان Action رو انجام بده و بعد فلان Action انجام میشه و درخواست بوسیله ActionForm به سمت JSP هدایت و به کاربر نشون داده میشن .
فعلان این خط کد رو داشته باشید:
<action path = "/Boss" type = "j2eeProject.struts.FirstAction"></action>
تا پست بعدی

----------


## Bahmany

سلام دوستان
الان در حال آماده کردن یک Tuotrial هستم با موضوعی که مطرح کردم تا الان که 5 صفحه شده انشالله تا شنبه یه چندتایی رو آماده می کنم و بعد میزارم توی سایت.

----------


## Bahmany

خوب فکر کنم از مطالب بالا مطالب خیلی خیلی مقدماتی رو فراگرفتید. و الان خوشبختانه IDE ( Netbeans 5.5 ) دارم و بهتر توضیح خواهم داد 

مراحل زیر را به دقت دنبال کنید :
1-    از منوی File – New Project  را انتخاب کنید
2-    از ویزارد New Project و قسمت Categories گزینه Web‌را انتخاب کنید و سپس  گزینه Web Application را از قسمت Projects انتخاب کنید و سپس Next را بزنید.ژ
3-    در صفحه Name and Location‌نام پروژتان را RegistrationTest بگذارید و Next را بزنید.
4-    در صفحه Frameworks گزینه Struts 1.2.9 را انتخاب کنید و بعد Add Struts TLDs را انتخاب و Finish را کلیک کنید.
5-    خوب ویزارد برای شما یک سری صفحات رو می سازه که همکنون همه آنها را باید پاک کنید 
5-1- از پالت Projects فایل های index.jsp , welcomeStructs.jsp را حذف کنید.
5-2-WEB-INF را باز کنید و struts-config.xml را پیدا کرده و آن را باز کنید. و خط های زیر را پیدا و پاک کنید.
<forward name="welcome"  path="/Welcome.do"/>
<action path="/Welcome" forward="/welcomeStruts.jsp"/>
5-3- وارد فایل web.xml شوید و سورس xml آن را بیاورید و سپس وارد تگ زیر شوید و تغییرات را اعمال کنید
قبل از تغییر:
    <welcome-file-list>
    <welcome-file>
            index.jsp
        </welcome-file>
    </welcome-file-list>
بعد از تغییر :
    <welcome-file-list>
    <welcome-file>

        </welcome-file>
    </welcome-file-list>
خوب با این کار تمامی اطلاعات مربوط به فایلهایی که خود Wizard‌ساخته بود حذف کردیم و عملا آنها را از پروژه خارج کردیم.
6-    Ctrl+N را بزنید از منوی ظاهر شده در قسمت File Types گزینه Struts Action را انتخاب کنید و Next را بزنید.
7-    نام کلاس را RegistrationAction بگذارید و Package را باز کرده و اولین  (com.myapp.struts)Package را برای این مورد انتخاب کنید و در ActionPath گزینه /RegistrationAction را انتخاب کنید و Finish  را بزنید.
8-    Ctrl+N را بزنید از منوی ظاهر شده در قسمت File Types گزینه Struts ActionForm Bean  را انتخاب کنید و Next را بزنید.
9-    نام کلاس را RegistrationActionForm بگذارید و Finish را بفشارید.
10-    Ctrl+N را بزنید و JSP را انتخاب و Next  را بزنید.
11-    نام صفحه را RegistrationPage را بگذارید و Finish  را بزنید.
12-    Ctrl+N را بزنید و JSP را انتخاب و Next  را بزنید.
13-    نام صفحه را RegistrationSuccessPage را بگذارید و Finish  را بزنید.
تا این قسمت مرحله تمامی فایل های مورد نیاز را ساختیم.
و حالا تغییرات را شروع می کنیم. حالا شما بگید از کدوم فایل شروع کنیم من که از RegistrationPage شروع می کنم.

14- از پالت Projects‌ فایل RegistratioPage.jsp را انتخاب کنید و تمامی کدهای داخل آن را به کدهای زیر تغییر دهید :

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Bahmany's Tutorial for Barnamenevis.org</title>
    </head>
    <body>
    <h1>Registration Page</h1>
    <table border="0">
        <form action=" GetTheseInfo.do">
        <thead>
            <tr>
                <th>Name :</th>
                <th><input type="text" name="name" value="" /></th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Family :</td>
                <td><input type="text" name="family" value="" /></td>
            </tr>
            <tr>
                <td>Phone Number :</td>
                <td><input type="text" name="phonenumber" value="" /></td>
            </tr>
            <tr>
                <td>Postal Code :</td>
                <td><input type="text" name="postalcode" value="" /></td>
            </tr>
            <tr>
                <td>ID :</td>
                <td><input type="text" name="id" value="" /></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="password" name="password" value="" /></td>
            </tr>
            <tr>
                <td><input type="submit" name="sub"></td>
                <td><input type="reset" name="reset"></td>
            </tr>
        </tbody>
         </form>
    </table>
    </body>
</html>
خوب کار طراحی فرم ثبت نام به پایان رسید
15- از پالت Projects وارد Source Package - com.myapp.struts – RegistrationActionForm.java شوید متدهای setter و getter را تنظیم کنید
متدهای getter, setter این متدها متدهایی هستند کار دریافت اطلاعات و نوشتن اطلاعات را بر عهده دارند.
16- سورس فایل باز شده را به کدهای زیر تغییر دهید:

package com.myapp.struts;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

public class RegistrationActionForm extends org.apache.struts.action.ActionForm {
// توجه کنید متغیرهای زیر باید بصورت Private تعریف شوند
    private String name;
    private String family;     
    private String phonenumber;
    private String postalcode;
    private String id;
    private String password;
    private String message;
 
    
// متدهای getter
    public String getname(){
        return name;
    }
    public String getfamily(){
        return family;
    }
    public String getphonenumber(){
        return phonenumber;
    }
    public String getpostalcode(){
        return postalcode;
    }
    public String getid(){
        return id;
    }
    public String getpassowrd(){
        return password;
    }
    public String getMessage(){
        return message;
    }
    
// متدهای setter
    public void setname(String name){
        this.name = name;
    }
    public void setfamily(String family){
        this.family = family;
    }
    public void setphonenumber(String phonenumber){
        this.phonenumber = phonenumber;
    }
    public void setpostalcode(String postalcode){
        this.postalcode = postalcode;
    }
    public void setid(){
        this.id = id;
    }
    public void setpassowrd(String password){
        this.password = password;
    }
    public void setMessage(String message){
        this.message = message; // برای نمایش پیغام نهایی برای آخرین صفحه
    }

}
17- داخل فایل RegistrationAction.java شوید و کدهای زیر را جایگزین کدهای داخل آن کنید.

package com.myapp.struts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;

public class RegistrationAction extends Action {
    
    private final static String SUCCESS = "success";
    public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        RegistrationActionForm regfrm = (RegistrationActionForm) form;
        
        // connect to DB and add informations.

        regfrm.setMessage("Data has updated .... ;) ");
        
        return mapping.findForward(SUCCESS);
    }
}


18- وارد فایل RegistrationActionForm.java شوید و سورس زیر را جایگزین کنید


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

<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> 


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Dedicated to Barnamenevis.org by Bahmany</title>
    </head>
    <body>

    <h1>Registration Result</h1>
        <h2><bean:write name="RegistrationActionForm" property="message"/></h2>
    </body>
</html>
19- وارد فایل struts-config.xml شوید و سورس زیر را جایگزین کنید

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">


<struts-config>
    <form-beans>
        <form-bean name="RegistrationActionForm" type="com.myapp.struts.RegistrationActionForm"/>
    </form-beans>
    <action-mappings>
        <action path="/GetTheseInfo" type="com.myapp.struts.RegistrationAction" name="RegistrationActionForm">
            <forward name="success" path="/RegistratioSuccessPage.jsp"/> 
        </action>
        
    </action-mappings>
    
    <controller processorClass="org.apache.struts.tiles.TilesReque  stProcessor"/>

    <message-resources parameter="com/myapp/struts/ApplicationResource"/>    
    <plug-in className="org.apache.struts.tiles.TilesPlugin" >
        <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />      
        <set-property property="moduleAware" value="true" />
    </plug-in>
    
    <!-- ========================= Validator plugin ================================= -->
    <plug-in className="org.apache.struts.validator.ValidatorPl  ugIn">
        <set-property
            property="pathnames"
            value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
    </plug-in>
  
</struts-config>
در ضمن هرجای سورس رو متوجه نشدید بگید تا توضیح بدم

منتظر برنامه بعدی نیز باشید تا یکی دو روز آینده آماده می کنم و تو سایت Upload خواهم کرد.

----------


## Bahmany

*معرفی Tag Library ها :*
خوب دوستان



> 4-    در صفحه Frameworks گزینه Struts 1.2.9 را انتخاب کنید و بعد Add Struts TLDs را انتخاب و Finish را کلیک کنی


بعدش به این کد در مرحله 18 توجه کنید
<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>  

و بازهم بعدش به این کد در همان مرحله 18 توجه کنید :
<h2><*bean:write* name="RegistrationActionForm" property="message"/></h2>

خوب بحث ما سر همین bean:write است 
این تگ با توجه به مسیری که در تک taglib معرفی شده تعریف شده است یعنی تگ taglib کتابخانه هایی از تگ های مجاز برای استفاده در صفحات مورد استفاده در JSP ( در این مثال ) را معرفی می کند.
این فایلها با پسوند tld معروف هستند و دارای مجموعه ای از tag های مجاز در صفحات jsp هستند.
اگر شما Netbeans استفاده می کنید با انتخاب مرحله 4 می توانید فایلهای مورد نظر را بصورت اتوماتیک در پوشه WEB-INF داشته باشید در غیر اینصورت این فایل ها را می بایست پیدا کرده و در مسیر پروژه خود قرار دهید 
معروفترین tld ها در زیر به شما معرفی شده اند که گفتم همراه با Struts و همینطور Netbeans وارد کامپیوترتان میشه و شما می تونید اون رو به پروژه تون منتقل کنید: :متفکر: 

*struts-html.tld* tag library : used for creating dynamic HTML user interfaces and forms.
*struts-bean.tld* tag library : provides substantial enhancements to the basic capability provided by.
*struts-logic.tld* tag library : can manage conditional generation of output text, looping over object collections for repetitive generation of output text, and application flow management. 
*struts-template.tld* tag library : contains tags that are useful in creating dynamic JSP templates for pages which share a common format.

دوستانی که تعریف بهتری دارند لطفا ارائه بدن.

----------


## Bahmany

*دستورات ارسالی بوسیله مرورگر      Commands.do


*به مرحله 14 توجه کنید :
<form action=" GetTheseInfo.do">
با فرستادن اطلاعات قرار گرفته در این فرم تحت نام *GetTheseInfo.do* بوسیله فایل struts-config.xml متوجه می شود که آن را باید به کدام Action بست دهد
مرحله 19 را دقت کنید :
<action path="/GetTheseInfo" type="com.myapp.struts.RegistrationAction" name="RegistrationActionForm">
            <forward name="success" path="/RegistratioSuccessPage.jsp"/> 
        </action>

توجه داشته باشید فقط دستوراتی که به پسوند do وارد می شوند پاسخ داده می شوند.
در قسمت type نام کلاس دریافت کننده دستور قرار گرفته است و از این طریق سیستم می فهمد که داده های ارسالی از طریق دستور GetTheseIndo می بایست تحویل کلاس RegistrationAction شود سپس کلاس RegistrationAction کار بروی داده های ارسالی را شروع می کند

----------


## Bahmany

*متدهای getter و setter :
*این متود ها همنطور که از اسمشون معلوم هست کار گرفتن اطلاعات و گذاشتن اطلاعات را برعهده دارند.
اگر به مرحله 16 توجه کنید خواهید دید که یکسری از توابع با set و یکسری از توابع با get شروع می شوند.
 private String name;
    private String family;     
    private String phonenumber;
    private String postalcode;
    private String id;
    private String password;
    private String message
 این متغیر هایی که بصورت private‌تعریف شده اند بوسیله struts‌به فرم input های کار شده در JSP تعمیم می شوند و تابع مثلا getFamily() نام وارد شده در آن Input رو برمی گرداند و همینطور تابع Setfamily در اون می نویسه . :کف کرده!:

----------


## Bahmany

سلام دوستان 
متاسفانه مدتی بعلت مشغله کاری نتوانستم مطلب را ادامه بدهم 
انشاا.. در پست بعدی نحوه پیاده سازی وب سایت های چند زبانه در Struts رو می خواهم در سایت قرار دهم.
و بعدش هم کنترل خطا رو بصورت کامل و مفصل
اگر از دوستان کسی هستش که بتونه به بنده کمک کنه خوشحال خواهم شد یا اگر در مطالب بالا مشکلی هست بگید تا مباحثه کنیم.

----------


## saeed_Z_F

> سلام دوستان 
> اگر از دوستان کسی هستش که بتونه به بنده کمک کنه خوشحال خواهم شد یا اگر در مطالب بالا مشکلی هست بگید تا مباحثه کنیم.


سلام
ممنون از مطلب خوبتون من که خوندمش و پیگیری می کنم ولی چون خودم بصورت عملی با Struts کار نمی کنم و از Framework های دیگه استفاده می کنم تسلطی ندارم که بتونم بحثی در موردش بکنم .
ولی خیلی به اطلاعاتم اضافه کرد .

----------


## Bahmany

> ممنون از مطلب خوبتون من که خوندمش و پیگیری می کنم ولی چون خودم بصورت عملی با Struts کار نمی کنم و از Framework های دیگه استفاده می کنم تسلطی ندارم که بتونم بحثی در موردش بکنم .
> ولی خیلی به اطلاعاتم اضافه کرد .


ممنونم سعید جان متاسفانه بنده از همون اول با struts کار کردم و JSF رو خیلی کم کار کردم و هیچ تجربه ای هم ندارم به خاطر همین هم در مبحثی که درباره JSF مطرح کردی نتونستم شرکت کنم.

بای

----------


## Bahmany

سلام دوستان 
بدون مقدمه می رم سر اصل مطلب. :متفکر: 
اصلی ترین کلاس برای پیاده سازی برنامه های چند زبانی در جاوا استفاده از شی Locale است.  :تشویق: 

Locale locale = new Locale("fa");

خوب تابلوست دیگه Locale زیر مشخص کننده زبان فارسی است.
از طریق بالا شما می تونید خودتون مقدار دهی زبان رو داشته باشید ولی یک راه دیگه بدست آوردن نوع زبان از Browser وجود داره که اون رو از طریق HTTP Header با نام Accept-Language ارسال می کنه:

Locale requestedLocale = request.getLocale();

خوب اینطوری می تونید بفهمید که کاربر(Browser) از چه زبانی استفاده  می کنه. :قهقهه: 

محتویات صفحاتی که می خواهید به زبانهای مختلف نشان داده شود را باید در فایل های .properties وارد نمائید. :عصبانی: 
برای ساخت فایل های .properties می بایست در محیط *Neatbeans 5.5* کلید Ctrl+N را بزنید سپس کاتالوگ Other را انتخاب و سپس در قسمت File Types گزینه Properties File رو انتخاب کنید. و سپس Next و یک نام دلخواه داده مثلا fa یا en بسته به نوع زبانی که خواستار طراحی آن هستید و سپس Finish را بزنید.
خوب بریم سراغ دو Tutorial : :کف کرده!: 
خوب یک پروژه درست کنید (همونی که توی اولین پست خدمتون عرض کردم)
دو تا فایل .properties‌با نام های en , fa درست کنید (en.properties , fa.properties)
خوب اطلاعات زیر را داخلشون وارد کنید

ApplicationResources_fa.properites :
reg.name = نام
reg.family = نام خانوادگی
reg.id = کد

ApplicationResources.properties:
reg.name = name
reg.family = family
reg.id = ID code



خوب حالا هر فایل Jsp‌ی که دلتون می خواد درست کنید و سپس کد زیر را وارد کنید:
      <table border="1">
        <form action="GetTheseInfo.do" method="POST">
        <thead>
            <tr>
                <th><bean:message key="*reg.name*"/></th>
                <th><input type="text" name="name" value="" /></th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><bean:message key="*reg.family*"/></td>
                <td><input type="text" name="family" value="" /></td>
            </tr>
            <tr>
                <td><bean:message key="*reg.id*"/></td>
                <td><input type="text" name="IDcode" value="" /></td>
            </tr>
            <tr>
                <td><input type="submit" value="Send" /></td>
                <td><input type="reset" value="Cancel" /></td>
            </tr>
        </tbody>
    </form>
    </table>


به اون هایی که bold‌ شدن توجه کنید و خصیصه key رو هم در نظر بگیرید.
برای دسترسی به کلید هایی که در فایل های .properties معرفی کرده ایم می بایست از تگ bean:message استفاده کنیم و در خصیصه key نیز نام کلیدی که می خواهیم بروی صفحه نوشته شود را می آوریم.
خوب و اما چگونه زبان را تعیین کنیم ؟؟؟؟!!!
برای تعیین زبان می بایست از یک Action‌استفاده کرد.
یک Action‌ بنام ChangeLanguage‌ساخته و اطلاعات زیر را وارد کنید:


package com.myapp.struts;

import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;

public class ChangeLangAction extends Action {


    public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
  String selectedLang = "en"      ;
  String language = request.getParameter("lang");
  if ((language != null) && language.equalsIgnoreCase("fa")) {
      selectedLang = "fa";
  }
  Locale locale = new Locale(selectedLang);
  setLocale(request, locale);
        return mapping.findForward("mainPage");

    }
}


وارد فایل struts-config‌ شوید و کد زیر را در قسمت action-mappings وارد کنید

            <action path="/changeLocale" type="com.myapp.struts.ChangeLangAction">
                <forward name="mainPage" path="/RegistrationForm.jsp"/>
               </action>


و حالا برای فرستادن دستور تغییر زبان به دو دکمه یا لینک در فایل Jsp مورد نظری که ساخته ایم نیاز دازیم.

    <a href="changeLocale.do?lang=fa">Farsi</a>
    <a href="changeLocale.do?lang=en">English</a>


و سپس این خط را نیز فایل struts-config اضافه کنید:

    <message-resources parameter="com/myapp/struts/ApplicationResources"/>

اگر این خط وجود داشت دست بهش نزنید.

خوب تموم شد. :خجالت: 
حالا این رو داشته باشید تا دربارش بیشتر صحبت کنیم. :افسرده:

----------


## Bahmany

*Handling Exception in Struts*
*قسمت اول
*
 public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        try{
            // connect to DB and do some actions
        }catch(Exception e){
    // after error this part executed
            return mapping.findForward("ErrorPage");
        }
        return mapping.findForward("GotoHomepage");
        
    }
}
دوستان معمولا نحوه کنترل خطا در جاوا معمولا به صورت بالا است و همه از این روش برای کنترل خطا استفاده می کنند. :لبخند: 
در برنامه هایی که با Struts می نویسید استفاده از روش بالا به هیچ وجه توصیه نمی شود ، چون باعث می شود کدهای کنترل خطا با کدهای معمولی برنامه قاطی پاتی شود. :گریه: 
<exception type="ExceptionClass" key="keyMessage" path="ExceptionPage"/>بیشتر مواقع ما دوست داریم با ایجاد خطا بدون عملیات خاصی صفحه خطا به کاربر نشان داده شود پیاده سازی این شیوه که جناب احمدرضا صدیقی نویسنده کتاب J2EE که مفصل درباره Struts صحبت کرده اند ، آن را روش ساده نامگذاری کرده اند بسیار ساده است. :متعجب: 
همانطور در کد بالایی مشاهده می کنید exceptions یکی از اجزای داخلی Action در داخل فایلStruts-config.xml قابل تعریف می باشد.
ExceptionClass : مشخص کننده نام کامل کلاس خطای تولید شده است.
KeyMessage : مشخص کننده پیغام خطایی می باشد که در صفحه نشان داده خواهد شد و در فایل های ApplicationResources تعریف می شود.
ExceptionPage : مشخص کننده صفحه خطایی است که به کاربر نشان داده خواهد شد.


          <action input="/RegistrationForm.jsp"  path="/GetTheseInfo" scope="session" type="com.myapp.struts.RegistrationAction">              <forward name="success" path="/OK.jsp"/>
            <exception type="java.sql.SQLException" key="error.sql" path="/exception.jsp" />
</action>این خط رو داشته باشید تا پست بعدی بیشتر به این مسئله بپردازیم. :اشتباه: 
راستش می خوام exception ها رو تموم کنیم و بعدش بپردازم به Validator ها.

----------


## Apache's Boy

جناب بهمنی واقعا ممنونم ، خیلی کمک کردید

----------


## amirshiva

دوست عزیز ضمن تشکر از شما
ایکاش مطالب آموزشیتو نو با struts 2 شروع میکردین چون این ورژن که شما دارین ادامه میدین دیگه تقریبا از رده خارج حساب میشه
باز هم از کار ارزشمندتون تشکر میکنم

----------


## pro_mvb

سلام 
اول بگم که این آقای بهمنی شاید با من یه نسبتی داشته باشن چون من هم بهمنی هستم  :لبخند گشاده!:  
بگذریم 
این صحبت هایی که شده من pdf این رو دارم! 205 صفحه هستش و از اول جاوا شروع کرده!
آخرش هم struts رو داره میگه . من خودم تازه شروع کردم و هنوز گیجم که کتابخانش کجاست و چجوری ادد میشه( آخه قبلا  jdeveloper کار میکردم الان netbeans ریختم ورژن 6.8) 
فایل رو براتون آپلود می کنم :قلب: 
http://alpachino2.persiangig.com/javalearn.rar

----------


## MLD_MLA

داداش با این شکلک های بی معنی که گذاشتی خودتو لو دادی که پستهای قسمت اول رو عینا از جایی کپی کردی :قهقهه: 
ولی مطالبت بد نی
ممنون

----------


## Eslami_83

مطالبتون خیلی خوب بود.کاش ادامه میدادین.
راستش من دنبال یک کتاب برای یادگیری حرفه ای struts2 هستم.فارسی یا انگلیسی بودنش هم برام فرقی نمیکنه.کاش دوستان کمک کنند.
فعلاٌ هم توی ارتباط با DataBase گیر کردم.ممنون میشم بشه دوباره این تاپیک فعال بشه.

----------


## maktoom

> داداش با این شکلک های بی معنی که گذاشتی خودتو لو دادی که پستهای قسمت اول رو عینا از جایی کپی کردی
> ولی مطالبت بد نی
> ممنون


سلام
کتاب رو از لینکی که داده شده دانلود کردم. اون قسمت که نام آقای بهمنی در کدشون نوشته شده در کتاب هم هست. این یعنی احتمالا اون کتاب یا توسط خود ایشون نوشته شده یا نگارنده از کد ایشون استفاده کرده.

----------


## maktoom

بنظر میرسه در این قسمت مشکلی هست:



> 15- از پالت Projects وارد Source Package - com.myapp.struts – RegistrationActionForm.java شوید متدهای setter و getter را تنظیم کنید
> متدهای getter, setter این متدها متدهایی هستند کار دریافت اطلاعات و نوشتن اطلاعات را بر عهده دارند.





> 18- وارد فایل RegistrationActionForm.java شوید و سورس زیر را جایگزین کنید


قدم به قدم اجرا کردم. احتمال میدم سورس شماره 18 متعلق به RegistrationSuccessPage.jsp باشه. اگه آقای بهمنی یا دوست دیگری این قسمت رو درستش کنه در اجرا مشکلی نخواهدبود.

----------

