« July 2007 | صفحه اصلی | September 2007 »
مثال JSF Application بخش 4August 28, 2007 01:44 PM
ادامه از مطلب قبلي
ادامه تعريف محتواي فايل هاي jsp
در مطلب قبل محتواي فايل inputname.jsp را مشخص كرديم. حال مي پردازيم به فايل greeting.jsp.
دستورات زير را در فايل greeting.jsp كپي نماييد:
ادامه تعريف محتواي فايل هاي jsp
در مطلب قبل محتواي فايل inputname.jsp را مشخص كرديم. حال مي پردازيم به فايل greeting.jsp.
دستورات زير را در فايل greeting.jsp كپي نماييد:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<f:loadBundle basename="jsfks.bundle.messages" var="msg"/>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<f:loadBundle basename="jsfks.bundle.messages" var="msg"/>
<html>
<head>
<title>greeting page</title>
</head>
<body>
<f:view>
<h3>
<h:outputText value="#{msg.greeting_text}" />,
<h:outputText value="#{personBean.personName}" />
<h:outputText value="#{msg.sign}" />
</h3>
</f:view>
</body>
</html>
<head>
<title>greeting page</title>
</head>
<body>
<f:view>
<h3>
<h:outputText value="#{msg.greeting_text}" />,
<h:outputText value="#{personBean.personName}" />
<h:outputText value="#{msg.sign}" />
</h3>
</f:view>
</body>
</html>
دستورات موجود در اين فايل مشابه دستورات فايل jsp ديگر است كه قبلا توضيح داده شد.
خروجي اين فايل چيزي شبيه اين خواهد بود:
خروجي اين فايل چيزي شبيه اين خواهد بود:
Welcome to JSF, name!
6- ايجاد فايل index.jsp
ما به يك فايل jsp سوم نيز نياز داريم كه واقعا بعنوان يك صفحه نمايش عمل نمي كند. بلكه تنها براي forward كردن به inputname.jsp به كار مي رود.
قابل index.jsp را درون فولدر WebContent بسازيد و دستورات زير را در آن كپي كنيد:
ما به يك فايل jsp سوم نيز نياز داريم كه واقعا بعنوان يك صفحه نمايش عمل نمي كند. بلكه تنها براي forward كردن به inputname.jsp به كار مي رود.
قابل index.jsp را درون فولدر WebContent بسازيد و دستورات زير را در آن كپي كنيد:
<html>
<body>
<jsp:forward page="/pages/inputname.jsf" />
</body>
</html>
<body>
<jsp:forward page="/pages/inputname.jsf" />
</body>
</html>
نكته قابل توجه در اينجا اين است كه ما در دستورات فوق پسوند فايل inputname.jsp را jsf ذكر كرده ايم. اين كار تنها در اينجا انجام مي شود. علت آن هم اين است كه در فايل web.xml مربوط به application، عبارتjsf.* الگو يا URL Pattern اي است كه مشخص مي كند handle كردن صفحه forward شده بايد توسط JavaServer Faces servlet موجود در Tomcat انجام شود.
با داشتن فايل index.jsp امكان اجراي برنامه توسط دستور زير فراهم مي شود:
با داشتن فايل index.jsp امكان اجراي برنامه توسط دستور زير فراهم مي شود:
كار ما در ساختن برنامه تقريبا تمام است. فقط مراحل كامپايل كردن و deployment مي ماند كه در ادامه به آن ها خواهيم پرداخت.
7- كامپايل كردن
براي اين كار كافي است فايل build.xml موجود در فولدر ant را بدين صورت اجرا نماييد:
7- كامپايل كردن
براي اين كار كافي است فايل build.xml موجود در فولدر ant را بدين صورت اجرا نماييد:
ant build
8- Deployment
قبل از اجراي برنامه در servlet container لازم است آن را Deploy نماييم. در اينجا ما از null Deployment استفاده خواهيم نمود. به اين منظور بايد در Tomcat يك context را register نماييم. براي اين كار بايد به فايل TomcatHome}\conf\server.xml} كد زير را اضافه نماييم:
قبل از اجراي برنامه در servlet container لازم است آن را Deploy نماييم. در اينجا ما از null Deployment استفاده خواهيم نمود. به اين منظور بايد در Tomcat يك context را register نماييم. براي اين كار بايد به فايل TomcatHome}\conf\server.xml} كد زير را اضافه نماييم:
<Context debug="0"
docBase="Path_to_WebContent"
path="/jsfks" reloadable="true"/>
docBase="Path_to_WebContent"
path="/jsfks" reloadable="true"/>
اين كد بايد در داخل قسمت Host و درست قبل از بسته شدن آن با تگ اضافه شود.
ضمنا عبارت Path_to_WebContent بايد با مسير واقعي فولدر WebContent روي سيستم شما جايگزين گردد. مثلا c:/examples/jsfks/WebContent.
9- Run
براي اجرا ابتدا Tomcat Server بايد start شود. معمولا اين كار توسط startup.bat در دايركتوري bin از Tomcat انجام مي شود. سپس browser را اجرا نموده و عبارت http://localhost:8080/jsfks را وارد نماييد.
ضمنا عبارت Path_to_WebContent بايد با مسير واقعي فولدر WebContent روي سيستم شما جايگزين گردد. مثلا c:/examples/jsfks/WebContent.
9- Run
براي اجرا ابتدا Tomcat Server بايد start شود. معمولا اين كار توسط startup.bat در دايركتوري bin از Tomcat انجام مي شود. سپس browser را اجرا نموده و عبارت http://localhost:8080/jsfks را وارد نماييد.
mahyar_ev | 01:44 PM | Comment(s)(2)
مثال JSF Application بخش 3August 25, 2007 03:20 PM
ادامه از مطلب قبلي
5- تعريف محتواي فايل هاي jsp:
در مراحل قبل دو صفحه jsp در مسير WebContent/pages ايجاد كرده ايم. اكنون مي خواهيم محتواي آن را مشخص نماييم.
در فايل inputname.jsp اين دستورات را كپي نماييد:
5- تعريف محتواي فايل هاي jsp:
در مراحل قبل دو صفحه jsp در مسير WebContent/pages ايجاد كرده ايم. اكنون مي خواهيم محتواي آن را مشخص نماييم.
در فايل inputname.jsp اين دستورات را كپي نماييد:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<f:loadBundle basename="jsfks.bundle.messages" var="msg"/>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<f:loadBundle basename="jsfks.bundle.messages" var="msg"/>
<html>
<head>
<title>enter your name page</title>
</head>
<body>
<f:view>
<h1>
<h:outputText value="#{msg.inputname_header}"/>
</h1>
<h:form id="helloForm">
<h:outputText value="#{msg.prompt}"/>
<h:inputText value="#{personBean.personName}" />
<h:commandButton action="greeting" value="#{msg.button_text}" />
</h:form>
</f:view>
</body>
</html>
<head>
<title>enter your name page</title>
</head>
<body>
<f:view>
<h1>
<h:outputText value="#{msg.inputname_header}"/>
</h1>
<h:form id="helloForm">
<h:outputText value="#{msg.prompt}"/>
<h:inputText value="#{personBean.personName}" />
<h:commandButton action="greeting" value="#{msg.button_text}" />
</h:form>
</f:view>
</body>
</html>
حال به دستورات نوشته شده نگاهي مي اندازيم:
در اولين خط مشخص كرده ايم كه مسير تگ هاي JSF اي كه عناصر HTML را تعريف مي كنند چيست.
دومين خط مسير تگ ها JSF اي كه عناصر Core JSF را تعريف مي كنند، مشخص مي كند.
سومين خط، فايل properties تعريف شده در مرحله قبل را Load مي نمايد.
اما قسمت HTML
در اولين خط مشخص كرده ايم كه مسير تگ هاي JSF اي كه عناصر HTML را تعريف مي كنند چيست.
دومين خط مسير تگ ها JSF اي كه عناصر Core JSF را تعريف مي كنند، مشخص مي كند.
سومين خط، فايل properties تعريف شده در مرحله قبل را Load مي نمايد.
اما قسمت HTML
<h:outputText value="#{msg.inputname_header}"/>
دستور بالا، مشخص مي كند كه از فايل properties كه در بالا معرفي شده، مقدار پارامتر inputname_header را بياب و در اينجا چاپ كن.
<h:form id="helloForm">
<h:outputText value="#{msg.prompt}"/>
<h:inputText value="#{personBean.personName}" />
<h:commandButton action="greeting" value="#{msg.button_text}" />
</h:form>
<h:outputText value="#{msg.prompt}"/>
<h:inputText value="#{personBean.personName}" />
<h:commandButton action="greeting" value="#{msg.button_text}" />
</h:form>
خط اول از مجموعه دستورات بالا شروع تعريف يك فرم با استفاده از تگ هاي JSF را مشخص مي كند.
خط دوم پارامتر prompt از فايل properties را چاپ مي نمايد.
خط سوم يك Text box ورودي HTML ايجاد مي كند. در مشخصه value ما اين فيلد را به Managed Bean كه قبلا ساخته ايم متصل مي كنيم.
خط چهارم يك تگ JSF براي ساخت يك Submit Button است. مقدار action در اين جا مساوي با greeting قرار داده شده. توجه كنيد كه اين مقدار همان مقدار تعريف شده در navigation_outcome فايل faces-config.xml مي باشد. بدين ترتيب صفحه بعدي كه بايد به آن برويم مشخص مي شود.
ادامه دارد...
خط دوم پارامتر prompt از فايل properties را چاپ مي نمايد.
خط سوم يك Text box ورودي HTML ايجاد مي كند. در مشخصه value ما اين فيلد را به Managed Bean كه قبلا ساخته ايم متصل مي كنيم.
خط چهارم يك تگ JSF براي ساخت يك Submit Button است. مقدار action در اين جا مساوي با greeting قرار داده شده. توجه كنيد كه اين مقدار همان مقدار تعريف شده در navigation_outcome فايل faces-config.xml مي باشد. بدين ترتيب صفحه بعدي كه بايد به آن برويم مشخص مي شود.
ادامه دارد...
mahyar_ev | 03:20 PM | Comment(s)(1)
مثال JSF Application بخش 2August 20, 2007 11:07 AM
ادامه از مطلب قبلي
1- ايجاد فايل هاي JSP
در مسير WebContent/pages فايل هاي inputname.jsp و greeting.jsp را ايجاد نماييد. محتواي اين دو فايل را در مراحل بعدي مشخص خواهيم كرد. دليل اينكه اين دو فايل را الان ايجاد كرده ايم اين است كه براي تعريف Navigation Rule در مرحله بعدي به آنها نياز خواهيم داشت.
2- تعريف Navigation
Navigation قلب JSF است و قواعد آن در فايل faces-config.xml تعريف مي شود. در اين مثال تنها كاري كه مي خواهيم بكنيم اين است كه از inputname.jsp به greeting.jsp برويم.
اگر بخواهيم Navigation Rule را بر اساس قواعد تعريف آن بيان نماييم به چنين عبارتي مي رسيم: rule مي گويد كه از view يا صفحه inputname.jsp به view يا صفحه greeting.jsp برو به شرطي كه outcome اجراي inputname.jsp عبارت greeting باشد. اين rule بدين صورت بيان مي شود:
1- ايجاد فايل هاي JSP
در مسير WebContent/pages فايل هاي inputname.jsp و greeting.jsp را ايجاد نماييد. محتواي اين دو فايل را در مراحل بعدي مشخص خواهيم كرد. دليل اينكه اين دو فايل را الان ايجاد كرده ايم اين است كه براي تعريف Navigation Rule در مرحله بعدي به آنها نياز خواهيم داشت.
2- تعريف Navigation
Navigation قلب JSF است و قواعد آن در فايل faces-config.xml تعريف مي شود. در اين مثال تنها كاري كه مي خواهيم بكنيم اين است كه از inputname.jsp به greeting.jsp برويم.
اگر بخواهيم Navigation Rule را بر اساس قواعد تعريف آن بيان نماييم به چنين عبارتي مي رسيم: rule مي گويد كه از view يا صفحه inputname.jsp به view يا صفحه greeting.jsp برو به شرطي كه outcome اجراي inputname.jsp عبارت greeting باشد. اين rule بدين صورت بيان مي شود:
<navigation-rule>
<from-view-id>/pages/inputname.jsp</fromview-id>
<navigation-case>
<from-outcome>greeting</from-outcome>
<to-view-id>/pages/greeting.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<from-view-id>/pages/inputname.jsp</fromview-id>
<navigation-case>
<from-outcome>greeting</from-outcome>
<to-view-id>/pages/greeting.jsp</to-view-id>
</navigation-case>
</navigation-rule>
3- ايجاد Managed Bean
در اين مرحله ابتدا در داخل فولدر JavaSource يك فولدر به نام jsfks كه همان نام Application است، ايجاد مي نماييم. در داخل اين فولدر، فايل PersonBean.java را براي ساخت كلاس PersonBean ايجاد مي نماييم. اين كلاس، براي set و get نام وارد شده توسط كاربر بكار مي رود. اين Bean را به اين دليل ساخته ايم كه منطق يا Logic برنامه را از قسمت نمايش يا همان صفحه jsp جدا كنيم. در فايل PersonBean.java با اين دستورات، كلاس PersonBean را ايجاد مي نماييم:
در اين مرحله ابتدا در داخل فولدر JavaSource يك فولدر به نام jsfks كه همان نام Application است، ايجاد مي نماييم. در داخل اين فولدر، فايل PersonBean.java را براي ساخت كلاس PersonBean ايجاد مي نماييم. اين كلاس، براي set و get نام وارد شده توسط كاربر بكار مي رود. اين Bean را به اين دليل ساخته ايم كه منطق يا Logic برنامه را از قسمت نمايش يا همان صفحه jsp جدا كنيم. در فايل PersonBean.java با اين دستورات، كلاس PersonBean را ايجاد مي نماييم:
package jsfks;
public class PersonBean {
String personName;
String personName;
public String getPersonName() {
return personName;
}
return personName;
}
public void setPersonName(String name) {
personName = name;
}
}
personName = name;
}
}
نحوه استفاده از اين كلاس از درون فايل jsp را در مراحل بعدي خواهيم ديد.
براي استفاده از Managed Bean تعريف شده، لازم است كه آن را در فايل faces-config.xml تعريف نماييم. از اين رو دستورات زير را به فايل مذكور اضافه مي نماييم:
براي استفاده از Managed Bean تعريف شده، لازم است كه آن را در فايل faces-config.xml تعريف نماييم. از اين رو دستورات زير را به فايل مذكور اضافه مي نماييم:
<managed-bean>
<managed-bean-name>personBean</managed-bean-name>
<managed-bean-class>jsfks.PersonBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean-name>personBean</managed-bean-name>
<managed-bean-class>jsfks.PersonBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
با اين تغيير، محتواي نهايي فايل faces-config.xml بايد مشابه اين باشد:
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<navigation-rule>
<from-view-id>/pages/inputname.jsp</from-view-id>
<navigation-case>
<from-outcome>greeting</from-outcome>
<to-view-id>/pages/greeting.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>personBean</managed-bean-name>
<managed-bean-class>jsfks.PersonBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
<navigation-rule>
<from-view-id>/pages/inputname.jsp</from-view-id>
<navigation-case>
<from-outcome>greeting</from-outcome>
<to-view-id>/pages/greeting.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>personBean</managed-bean-name>
<managed-bean-class>jsfks.PersonBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
4- ايجاد يك فايل Properties يا resource bundle
فايل properties فايلي است حاوي مجموعه جفت هايي به فرمت param=value . در صفحات jsp كه خواهيم ساخت از پيغامهاي ذخيره شده در آن استفاده خواهد شد. جدا نمودن پيغام ها از صفحات jsp اين خوبي را دارد كه مي توان بدون تغيير در فايل jsp به سرعت پيغام ها را ويرايش نمود.
ابتدا در فولدر JavaSource/jsfks فولدر ديگري به نام bundle ايجاد نماييد و داخل آن نيز فايلي به نام messages.properties بسازيد. اين فايل حتما بايد داخل JavaSource باشد كه هنگام كامپايل پروژه به فولدر class منتقل شود و در هنگام اجرا قابل دستيابي باشد.
متن زير را درون فايل messages.properties كپي كنيد:
فايل properties فايلي است حاوي مجموعه جفت هايي به فرمت param=value . در صفحات jsp كه خواهيم ساخت از پيغامهاي ذخيره شده در آن استفاده خواهد شد. جدا نمودن پيغام ها از صفحات jsp اين خوبي را دارد كه مي توان بدون تغيير در فايل jsp به سرعت پيغام ها را ويرايش نمود.
ابتدا در فولدر JavaSource/jsfks فولدر ديگري به نام bundle ايجاد نماييد و داخل آن نيز فايلي به نام messages.properties بسازيد. اين فايل حتما بايد داخل JavaSource باشد كه هنگام كامپايل پروژه به فولدر class منتقل شود و در هنگام اجرا قابل دستيابي باشد.
متن زير را درون فايل messages.properties كپي كنيد:
inputname_header=JSF KickStart
prompt=Tell us your name:
greeting_text=Welcome to JSF
button_text=Say Hello
sign=!
prompt=Tell us your name:
greeting_text=Welcome to JSF
button_text=Say Hello
sign=!
حالا هر آنچه لازم است براي ساخت صفحات jsp، در اختيار داريم.
ادامه دارد...
ادامه دارد...
mahyar_ev | 11:07 AM | Comment(s)(0)
مثال JSF Application بخش 1August 18, 2007 10:47 AM
از سايت j2eeBrain در مطلبي نحوه ايجاد يك JSF Application بصورت گام به گام توضيح داده شده است. ترجمه آن را در چند قسمت در ادامه خواهم آورد:
براي ايجاد JSF Application مورد بحث به چه چيزهايي نياز هست؟
. JDK1.4
. Tomcat 5 يا هر Servlet Container ديگر از جمله JBoss ، Resin و JRUN
. Ant
معرفي Application اي كه خواهيم ساخت:
در اين مثال ما دو صفحه خواهيم ساخت. در صفحه اول ما نام كاربر را از او دريافت مي كنيم و در صفحه دوم به او خوش آمد مي گوييم.
ساختار Application:
ساختار Web Application ها نوعا بدين صورت است:
براي ايجاد JSF Application مورد بحث به چه چيزهايي نياز هست؟
. JDK1.4
. Tomcat 5 يا هر Servlet Container ديگر از جمله JBoss ، Resin و JRUN
. Ant
معرفي Application اي كه خواهيم ساخت:
در اين مثال ما دو صفحه خواهيم ساخت. در صفحه اول ما نام كاربر را از او دريافت مي كنيم و در صفحه دوم به او خوش آمد مي گوييم.
ساختار Application:
ساختار Web Application ها نوعا بدين صورت است:
jsfks
/ant
build.xml
/JavaSource
/WebContent
/WEB-INF
/classes
/lib
Jsf-impl.jar
Jsf-api.jar
Faces-config.xml
Web.xml
/pages
/ant
build.xml
/JavaSource
/WebContent
/WEB-INF
/classes
/lib
Jsf-impl.jar
Jsf-api.jar
Faces-config.xml
Web.xml
/pages
- فولدر Jsfks فولدر و نام اصلي پروژه است
- فولدر ant اسكريپت هاي مربوط به ant را به همراه فايل پيش فرض build.xml نگهداري مي كند.
- فولدر JavaSource جايي است كه فايل هاي source كلاس هاي جاوا قرار مي گيرند.
- فولدر WebContent فايل هاي واقعي web application را كه توسط application server يا servlet container بكار مي روند، در بر مي گيرد.
- فولدر WEB_INF كه درون WebContent قرار دارد، فايل هايي را نگهداري مي كند كه در زمان اجراي Web Application بكار مي روند، اما از دسترس Browser دور هستند.
- فولدر classes كه درون WEB_INF قرار دارد كلاس هاي كامپايل شده (كامپايل شده بر اساس فايل هاي موجود در JavaSource) را نگهداري مي نمايند.
- فولدر lib درون WEB_INF قرار دارد و كتابخانه هاي مورد نياز Application را نگهداري مي كند. از جمله - Jar file هاي third party (توليد شده توسط توليد كنندگان ديگر)
- دو فايل jsf-impl.jar و jsf-api.jar كه درون فولدر lib قرار دارند، فايل هاي كتابخانه خود JSF مي باشند. هر JSF Application الزاما بايد اين دو فايل را داشته باشد.
- فايل web.xml كه درون WEB_INF قرار دارد Deployment Descriptor ناميده مي شود. اين يك فايل XML است كه servlet و ساير كامپوننت هاي Application در آن معرفي مي شوند.
- فايل faces-config.xml درون WEB_INF قرار دارد كه فايل JSF Configuration است. در اين فايل Bean هاي مورد نياز و قواعد Navigation نوشته مي شوند.
- فولدر pages درون WebContent واقع شده و براي نگهداري صفحات نمايشي JSP و HTML بكار مي رود.
نكته 1: فايل هاي build.xml و Web.xml معمولا توسط خود IDE ها ايجاد و مقداردهي مي شوند و اغلب نيازي به مقداردهي آنها بصورت دستي نيست. اما بطور كلي براي آشنايي با ساختار محتوايي اين فايل ها مي توان به منابع فراواني كه در اينترنت وجود دارند، رجوع نمود.
نكته 2: مثال ذكر شده بر هيچ IDE خاصي مبتني نيست و حالت عام دارد. اما فايل و فولدرهايي كه با Netbeans و ساير IDE ها براي Web Application ساخته مي شود، از نظر نحوه نامگذاري و ساختار، تفاوت هايي با آنچه ذكر شد دارد. بااين حال متناظر با فايل و فولدرهاي ذكر شده در آن ها هم موجود و قابل شناسايي است.
مراحل كار:
1- ساخت صفحات JSP
2- تعريف Navigation Rule
3- ايجاد يك Managed Bean
4- ايجاد يك properties file
5- تعريف محتواي فايل هاي JSP
6- ايجاد فايل index.jsp
7- كامپايل كردن Application
8- Deploy كردن و اجراي Application
ادامه دارد...
- فولدر ant اسكريپت هاي مربوط به ant را به همراه فايل پيش فرض build.xml نگهداري مي كند.
- فولدر JavaSource جايي است كه فايل هاي source كلاس هاي جاوا قرار مي گيرند.
- فولدر WebContent فايل هاي واقعي web application را كه توسط application server يا servlet container بكار مي روند، در بر مي گيرد.
- فولدر WEB_INF كه درون WebContent قرار دارد، فايل هايي را نگهداري مي كند كه در زمان اجراي Web Application بكار مي روند، اما از دسترس Browser دور هستند.
- فولدر classes كه درون WEB_INF قرار دارد كلاس هاي كامپايل شده (كامپايل شده بر اساس فايل هاي موجود در JavaSource) را نگهداري مي نمايند.
- فولدر lib درون WEB_INF قرار دارد و كتابخانه هاي مورد نياز Application را نگهداري مي كند. از جمله - Jar file هاي third party (توليد شده توسط توليد كنندگان ديگر)
- دو فايل jsf-impl.jar و jsf-api.jar كه درون فولدر lib قرار دارند، فايل هاي كتابخانه خود JSF مي باشند. هر JSF Application الزاما بايد اين دو فايل را داشته باشد.
- فايل web.xml كه درون WEB_INF قرار دارد Deployment Descriptor ناميده مي شود. اين يك فايل XML است كه servlet و ساير كامپوننت هاي Application در آن معرفي مي شوند.
- فايل faces-config.xml درون WEB_INF قرار دارد كه فايل JSF Configuration است. در اين فايل Bean هاي مورد نياز و قواعد Navigation نوشته مي شوند.
- فولدر pages درون WebContent واقع شده و براي نگهداري صفحات نمايشي JSP و HTML بكار مي رود.
نكته 1: فايل هاي build.xml و Web.xml معمولا توسط خود IDE ها ايجاد و مقداردهي مي شوند و اغلب نيازي به مقداردهي آنها بصورت دستي نيست. اما بطور كلي براي آشنايي با ساختار محتوايي اين فايل ها مي توان به منابع فراواني كه در اينترنت وجود دارند، رجوع نمود.
نكته 2: مثال ذكر شده بر هيچ IDE خاصي مبتني نيست و حالت عام دارد. اما فايل و فولدرهايي كه با Netbeans و ساير IDE ها براي Web Application ساخته مي شود، از نظر نحوه نامگذاري و ساختار، تفاوت هايي با آنچه ذكر شد دارد. بااين حال متناظر با فايل و فولدرهاي ذكر شده در آن ها هم موجود و قابل شناسايي است.
مراحل كار:
1- ساخت صفحات JSP
2- تعريف Navigation Rule
3- ايجاد يك Managed Bean
4- ايجاد يك properties file
5- تعريف محتواي فايل هاي JSP
6- ايجاد فايل index.jsp
7- كامپايل كردن Application
8- Deploy كردن و اجراي Application
ادامه دارد...
mahyar_ev | 10:47 AM | Comment(s)(1)
تفاوت JSF و StrutsAugust 13, 2007 04:32 PM
يكي از سوالات متداول در ارتباط با JSF تفاوت آن با Struts است.
Struts يك Web Application Framework كد باز جاوا است كه معماري اش مبتني بر MVC است و در آن request ها توسط Controller كه وظيفه مديريت اجزاء Application را به عهده دارد، توزيع مي شوند.
اما همانطور كه قبلا نيز ذكر شد، تكنولوژي JSF يك User Interface Framework است كه تنها بر لايه View از معماري MVC تاكيد دارد. با اين حال برخي عمليات هست كه هم توسط Struts و هم JSF قابل پياده سازي است. اين دو مزايا و معايبي نسبت به يكديگر دارند كه در ادامه به مهمترين آنها اشاره مي شود:
مزاياي اصلي Struts نسبت به JSF عبارتند از:
1- از آنجا كه Struts يك Web Application Framework است، از معماري پيشرفته تري در Controller برخوردار است. برنامه نويسان در Struts مي توانند با ايجاد يك Action object به Controller دستيابي پيدا كنند. در حالي كه JSF امكان دسترسي به controller را فراهم نمي نمايد.
2- Struts شامل يك Layout management framework قدرتمند به نام Tiles است كه به شما امكان ايجاد reusabe Template را مي دهد كه مي توانيد آن را در صفحات مختلف دوباره مورد استفاده قرار دهيد. لذا بدين روش، ظاهر مشابه و يكپارچه اي را براي Application شما فراهم مي سازد.
3- framework اعتبار سنجي struts شامل مجموعه بزرگتري از validator هاي استاندارد است كه بطور اتوماتيك هر دو اعتبارسنجي هاي Server-side و Client-side را بر اساس مجموعه قوانين موجود در يك فايل Configuration ايجاد مي نمايد. همچنين شما مي توانيد Custom Validator ايجاد نماييد و با افزودن definition آن به فايل configuration به راحتي در Application خود، آن را include نماييد.
اما مهمترين مزيت JSF بر Struts مدل UI Component انعطاف پذير و قابل توسعه آن است و شامل اين موارد مي شود:
1- داراي يك API استاندارد براي تعريف وضعيت و رفتار انواع كامپوننت ها است. همچنين كاربران امكان ايجاد كامپوننت هاي جديد را نيز دارند. به علاوه كامپوننت هاي توليد شده توسط توليد كنندگان ديگر نيز در بازار، موجود و بصورت عمومي در دسترس است.
2- يك مدل rendering جداگانه براي تعريف نحوه render شدن كامپوننت ها دارد كه مي توان توسط آن نحوه render شدن كامپوننت را به روش هاي مختلف تعريف نمود. بعنوان مثال يك كامپوننت را كه براي انتخاب يك آيتم از ليست به كار مي رود را مي توان بعنوان يك menu يا radio button آن را render كرد.
3- داراي مدل event و Listener است كه توسط آن event هاي كامپوننت ها را مي توان كدنويسي نمود.
4- داراي مدل هايي براي conversion و validation داده هاي كامپوننت ها است.
از آنجا كه در JSF معماري كامپوننت از definition آن جدا است مي توان نحوه render شدن كامپوننت را به روش هاي گوناگوني فراهم نمود. حتي مي توان آنها را براي كاربران مختلف مثلا كاربران WML نيز render نمود. همچنين شما با JSF مي توانيد كامپوننت هاي جديد ايجاد نماييد. هيچ يك از اين دو، در struts امكان پذير نيست. در واقع در struts هيچ رويكردي درمورد كامپوننت هاي server-side وجود ندارد و به همين دليل نيز هيچ مدل و امكاني براي پاسخگويي به event هاي كامپوننت ها و نگهداري و بازيابي وضعيت كامپوننت ها وجود ندارد. با اين حال struts داراي يك tag library مفيد براي render كردن كامپوننت ها است كه تنها به HTML قابليت render شدن دارند.
مزيت مهم ديگر JSF اين است كه استاندارد است. منظور از استاندارد بودن اين است كه توسط JCP : Java Community Process و براي integrate شدن آسان با ابزار گوناگون ايجاد شده است. در نتيجه از JSF در حال حاضر پشتيباني زيادي مي شود و امكان استفاده از آن در چندين IDE قرار داده شده است.
از آنجا كه JSF و Struts هر دو داراي مزاياي با ارزشي هستند، طراحان شايد هر دو را در application خود بطور همزمان بكار گيرند. طراحان مي توانند مدل كامپوننت JSF را به Struts Application هاي خود وارد نمايند و همچنان از معماري controller موجود در struts بهره ببرند. بطور مشابه طراحاني كه JSF Application دارند مي توانند از مكانيزم هاي قدرتمند اعتبارسنجي client-side و Tiles Layout Framework استفاده كنند. به اين هدف مي توان با استفاده از Struts_Faces integration Library نيز دست يافت.
اين مطلب از FAQ about JSF Technology ترجمه شده است.
Struts يك Web Application Framework كد باز جاوا است كه معماري اش مبتني بر MVC است و در آن request ها توسط Controller كه وظيفه مديريت اجزاء Application را به عهده دارد، توزيع مي شوند.
اما همانطور كه قبلا نيز ذكر شد، تكنولوژي JSF يك User Interface Framework است كه تنها بر لايه View از معماري MVC تاكيد دارد. با اين حال برخي عمليات هست كه هم توسط Struts و هم JSF قابل پياده سازي است. اين دو مزايا و معايبي نسبت به يكديگر دارند كه در ادامه به مهمترين آنها اشاره مي شود:
مزاياي اصلي Struts نسبت به JSF عبارتند از:
1- از آنجا كه Struts يك Web Application Framework است، از معماري پيشرفته تري در Controller برخوردار است. برنامه نويسان در Struts مي توانند با ايجاد يك Action object به Controller دستيابي پيدا كنند. در حالي كه JSF امكان دسترسي به controller را فراهم نمي نمايد.
2- Struts شامل يك Layout management framework قدرتمند به نام Tiles است كه به شما امكان ايجاد reusabe Template را مي دهد كه مي توانيد آن را در صفحات مختلف دوباره مورد استفاده قرار دهيد. لذا بدين روش، ظاهر مشابه و يكپارچه اي را براي Application شما فراهم مي سازد.
3- framework اعتبار سنجي struts شامل مجموعه بزرگتري از validator هاي استاندارد است كه بطور اتوماتيك هر دو اعتبارسنجي هاي Server-side و Client-side را بر اساس مجموعه قوانين موجود در يك فايل Configuration ايجاد مي نمايد. همچنين شما مي توانيد Custom Validator ايجاد نماييد و با افزودن definition آن به فايل configuration به راحتي در Application خود، آن را include نماييد.
اما مهمترين مزيت JSF بر Struts مدل UI Component انعطاف پذير و قابل توسعه آن است و شامل اين موارد مي شود:
1- داراي يك API استاندارد براي تعريف وضعيت و رفتار انواع كامپوننت ها است. همچنين كاربران امكان ايجاد كامپوننت هاي جديد را نيز دارند. به علاوه كامپوننت هاي توليد شده توسط توليد كنندگان ديگر نيز در بازار، موجود و بصورت عمومي در دسترس است.
2- يك مدل rendering جداگانه براي تعريف نحوه render شدن كامپوننت ها دارد كه مي توان توسط آن نحوه render شدن كامپوننت را به روش هاي مختلف تعريف نمود. بعنوان مثال يك كامپوننت را كه براي انتخاب يك آيتم از ليست به كار مي رود را مي توان بعنوان يك menu يا radio button آن را render كرد.
3- داراي مدل event و Listener است كه توسط آن event هاي كامپوننت ها را مي توان كدنويسي نمود.
4- داراي مدل هايي براي conversion و validation داده هاي كامپوننت ها است.
از آنجا كه در JSF معماري كامپوننت از definition آن جدا است مي توان نحوه render شدن كامپوننت را به روش هاي گوناگوني فراهم نمود. حتي مي توان آنها را براي كاربران مختلف مثلا كاربران WML نيز render نمود. همچنين شما با JSF مي توانيد كامپوننت هاي جديد ايجاد نماييد. هيچ يك از اين دو، در struts امكان پذير نيست. در واقع در struts هيچ رويكردي درمورد كامپوننت هاي server-side وجود ندارد و به همين دليل نيز هيچ مدل و امكاني براي پاسخگويي به event هاي كامپوننت ها و نگهداري و بازيابي وضعيت كامپوننت ها وجود ندارد. با اين حال struts داراي يك tag library مفيد براي render كردن كامپوننت ها است كه تنها به HTML قابليت render شدن دارند.
مزيت مهم ديگر JSF اين است كه استاندارد است. منظور از استاندارد بودن اين است كه توسط JCP : Java Community Process و براي integrate شدن آسان با ابزار گوناگون ايجاد شده است. در نتيجه از JSF در حال حاضر پشتيباني زيادي مي شود و امكان استفاده از آن در چندين IDE قرار داده شده است.
از آنجا كه JSF و Struts هر دو داراي مزاياي با ارزشي هستند، طراحان شايد هر دو را در application خود بطور همزمان بكار گيرند. طراحان مي توانند مدل كامپوننت JSF را به Struts Application هاي خود وارد نمايند و همچنان از معماري controller موجود در struts بهره ببرند. بطور مشابه طراحاني كه JSF Application دارند مي توانند از مكانيزم هاي قدرتمند اعتبارسنجي client-side و Tiles Layout Framework استفاده كنند. به اين هدف مي توان با استفاده از Struts_Faces integration Library نيز دست يافت.
اين مطلب از FAQ about JSF Technology ترجمه شده است.
mahyar_ev | 04:32 PM | Comment(s)(0)
تاخير در update وبلاگAugust 7, 2007 10:23 AM
اينكه كمي با تاخير اينجا update ميشود بخشي اش تقصير من است كه خيلي گرفتارم . اما دليل اصلي اش چيز ديگري است. من براي تهيه مطلب وقت مي گذارم. اما مطالب آنقدر كه بايد جلو نمي روند. در انتخاب موضوعات مرتبط با جاوا جهت طرح در اين وبلاگ هميشه كمي وقت مي گذارم و سبك سنگين مي كنم. سعي مي كنم آنهايي كه پركاربرد تر و مهم تر هستند را انتخاب كنم. همچنين مي خواهم كه مطالبم روال و ترتيب منطقي داشته باشند. انتخاب JSF بعد از JSP و Servlet به همين دليل بود. در refrence و tutorial هاي سايت Sun تاكيد زيادي روي JSF شده. به همين دليل هم آن را براي توضيح انتخاب كردم.
هر موضوعي هم از دو بخش تشكيل شده، يكي اش معرفي آن موضوع و تكنولوژي است و ديگري آوردن مثال از نحوه كار آن. معرفي تكنولوژي معمولا ساده تر است. با يك search در google و بررسي و جمع بندي موضوعات مرتبط مي شود به يك معرفي مناسب رسيد. اما بحث نحوه استفاده از آن فرق مي كند. اصرار دارم كه مثال هايي را كه اينجا مي آورم قبلا خودم تست كرده باشم. همين است كه مشكل ساز است. تمام مثال هاي JSF كه پيدا كرده ام روي JavaEE 5 و Netbeans 5.5 ارائه شده اند. كه من هيچ كدامشان را ندارم و download آنها هم از سايت Sun امكان پذير نيست. در بازار هم ظاهرا پيدا نمي شود. اين چند وقت، خيلي به اين در و آن در زدم كه با فيلتر شكن و نرم افزارهاي مختلف download manager اين نرم افزارها را download كنم كه موفق نشده ام. خلاصه كمي ديگر به من وقت دهيد. اگر موفق شدم كه اين نرم افزارها را بگيرم و مثال ها را اجرا كنم كه چه بهتر. بحث JSF را با مثال هايش دنبال مي كنم. اگر هم نتوانستم كه دو راه دارم. يا مثال ها را بدون تست ترجمه كنم و اينجا بگذارم و يا اينكه فقط به معرفي تكنولوژي ها بپردازم. بد نيست در اين مورد نظر بدهيد و بگوييد كه كدام را ترجيح مي دهيد و اصولا روند اين وبلاگ را مي پسنديد يا نه. منتظرم. اصلا كسي اينجا را مي خواند يا نه؟
هر موضوعي هم از دو بخش تشكيل شده، يكي اش معرفي آن موضوع و تكنولوژي است و ديگري آوردن مثال از نحوه كار آن. معرفي تكنولوژي معمولا ساده تر است. با يك search در google و بررسي و جمع بندي موضوعات مرتبط مي شود به يك معرفي مناسب رسيد. اما بحث نحوه استفاده از آن فرق مي كند. اصرار دارم كه مثال هايي را كه اينجا مي آورم قبلا خودم تست كرده باشم. همين است كه مشكل ساز است. تمام مثال هاي JSF كه پيدا كرده ام روي JavaEE 5 و Netbeans 5.5 ارائه شده اند. كه من هيچ كدامشان را ندارم و download آنها هم از سايت Sun امكان پذير نيست. در بازار هم ظاهرا پيدا نمي شود. اين چند وقت، خيلي به اين در و آن در زدم كه با فيلتر شكن و نرم افزارهاي مختلف download manager اين نرم افزارها را download كنم كه موفق نشده ام. خلاصه كمي ديگر به من وقت دهيد. اگر موفق شدم كه اين نرم افزارها را بگيرم و مثال ها را اجرا كنم كه چه بهتر. بحث JSF را با مثال هايش دنبال مي كنم. اگر هم نتوانستم كه دو راه دارم. يا مثال ها را بدون تست ترجمه كنم و اينجا بگذارم و يا اينكه فقط به معرفي تكنولوژي ها بپردازم. بد نيست در اين مورد نظر بدهيد و بگوييد كه كدام را ترجيح مي دهيد و اصولا روند اين وبلاگ را مي پسنديد يا نه. منتظرم. اصلا كسي اينجا را مي خواند يا نه؟