« 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 را با مثال هايش دنبال مي كنم. اگر هم نتوانستم كه دو راه دارم. يا مثال ها را بدون تست ترجمه كنم و اينجا بگذارم و يا اينكه ?قط به معر?ي تكنولوژي ها بپردازم. بد نيست در اين مورد نظر بدهيد و بگوييد كه كدام را ترجيح مي دهيد و اصولا روند اين وبلاگ را مي پسنديد يا نه. منتظرم. اصلا كسي اينجا را مي خواند يا نه؟