More Related Content
Similar to Navigation (15)
Navigation
- 1. املعلوماتية اهلندسة كلية
اخلامسة السنة
والنظم الشبكات قسمي لطالبوالربجميات هندسة
محص-سوريا
االلكرتونية التجارة مقرر
د.خلوف زينب
احملاضرةاخلامسة
التنقلبنيالصفحات
JSF: Page Navigation
أنواعالتنقلبنيالصفحاتيفJSF
يت أن ميكن الصفحات بني التنقلصريح بشكل أو ضمين بشكل م.
1.تنقلضمينإىلالصفحات:ويتميفهذهيقةرالطحتديدالصفحةاليتسيتماإلنتقالإليهامنخاللالنتيجةاليت
تعيدهايقةرالطAction MethodمنManaged Bean.حيثأنالنتيجةاليتيتمإعادهتامتثلإسم
الصفحةاليتسيتماإلنتقالإليهاعلماأنهليسبالضرورةأنتكونهذهالنتيجةسلسلةحمارفبلميكنأنتكون
قيمةعددية.يفاملثال(1)،عندماتتمإعادةسلسلةاحملارف"success"يتماإلنتقالإىلالصفحة
success.xhtmlوعندماتعادسلسلةاحملارف"index"يتماإلنتقالإىلالصفحةindex.xhtml.ويف
املثال(2)عندماإعادة تتم1اإل يتمنتقالإالصفحة ىل1.xhtmlوعندمايعاد2الصفحة إىل اإلنتقال يتم
2.xhtml.
public int guessCommand ()
{
if (guess == target)
{
return (1);
}
else
{
this.attempts++;
return (2);
}
}
public String guessCommand ()
{
if (guess == target)
{
return ("success");
}
else
{
this.attempts++;
return ("index");
}
}
املثال2املثال1
2.التنقلالصريحإىلالصفحات:يفهذهيقةرالطتتمإضافةاعدوقالتنقلبشكليحرصإىلملفيفاترالتعfaces-
config.xml،هذهاعدوالقحتددبشكليحرصالصفحةاليتسيتماإلنتقالإليهامنأجلنتيجةمعينة.
مالحظة:
باإل يسمى االنتقال أنواع من نوع ويوجدالثاب نتقالStatic Navigationاليت الصفحة إسم وضع خالل من ويتم
خاصية يف إليها اإلنتقال يرادActionاألوامر لزر:
<h:commandButton ... action="fixed-page/">
- 2. املثال يف كما:
<h:commandButton ... action="/view/result-page-1.xhtml/">
ال املسار حتديد جيب حيثللصفحة صحيح.
التنقلالصريحإىلالصفحات
Explicit Page Navigation
التنقليحرالصبنيالصفحاتيتمامللف يف التنقل اعدوق يفرتع خالل منfaces-config.xmlيف ،Netbeansيتم
امللف إنشاءfaces-config.xmlللشكل ًاوفق:
اضيرتإف بشكل ليتوضعاجمللد ضمنWEB-INFكمالشكل يف امبني:
العام الشكلللملفfaces-config.xmlالشكل يف مبني:
العنصر<faces-config>ميثلجذرملفـلاxmlويتضمنمجيعيفاترالتعاخلاصةبالتطبيقغريتلكاملعرفةيفملف
موصفإستخدامالتطبيق(web.xml)Web Deployment Descriptor.كلالعناصريفامللفfaces-
config.xmlمثل(application, managed-bean, ..., factory)هييةرإختياميكنوأنيتضمنامللف
احدوأوأكثرمنهذهالعناصر.التنقل اعدوق يفرتع كيفيةعلى كزسنر احملاضرة هذه يف.
ملف عن مثالfaces-config.xmlالصفح بني التنقل يفرلتع اعدوالق من جمموعة يتضمنات:
- 3. faces-config.xml
1 <?xml version="1.0"?>
2 <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
5 http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
6 version="2.0">
7
8 <navigation-rule>
9 <from-view-id>/start-page.xhtml</from-view-id>
10 <navigation-case>
11 <from-outcome>too-short</from-outcome>
12 <to-view-id>error-message.xhtml</to-view-id>
13 </navigation-case>
14 </navigation-rule>
15 <navigation-rule>
16 <from-view-id>/start-page.xhtml</from-view-id>
17 <navigation-case>
18 <from-outcome>page1</from-outcome>
19 <to-view-id>result-page-1.xhtml</to-view-id>
20 </navigation-case>
21 <navigation-case>
22 <from-outcome>page2</from-outcome>
23 <to-view-id>result-page-2.xhtml</to-view-id>
24 </navigation-case>
25 </navigation-rule>
26 </faces-config>
27
اعدوقالتنقل(Navigation Rules)امللف يفfaces-config.xml
العنصر<navigation-rule>أكثرهم من ، األبناء العناصر من عدد العنصر هلذا يكون أن ميكن ، قاعدة يعرف
ًااستخدام:
CHILD ELEMENTMULTIPLICITYDESCRIPTION
- 4. from-view-idzero or oneتطبق اليت الصفحة حتدديكن مل إذا ، القاعدة عليها
الصفحات كلعلى تطبق فالقاعدة موجود العنصر هذا.
navigation-casezero to manyحتقق إذا إليها اإلنتقال سيتم اليت التالية الصفحة حيدد
معني جخر أو شرط.
مالحظة:عنصر أي التتضمن قد القاعدة أن السابق اجلدول من املالحظ منnavigation-caseأخطاء اليعطي هذا ،
ـل نتيجة هناك كانان خطأ حيصل ولكن بالتنفيذAction Methodحالة واليوجدnavigation-caseهلذه افقةوم
النتيجة.
للعنصر<navigation-case>ًااستخدام أكثرها ومن أبناء عناصر ًاأيض.
CHILD ELEMENTMULTIPLICITYDESCRIPTION
from-outcomezero or oneمثل جخر تعرف"success"أو"failure"ـل
Action Method
to-view-idexactly oneحتققت إذا إليها االنتقال سيتم اليت التالية الصفحة تعرف
احلالة هذه.
from-actionzero or oneهذه تطبيق يتم حىت يتنفذ أن جيب تعبري على تدل قيمة
القاعدة.
redirectzero or oneـب فةراملع للصفحة اإلنتقال أن حيددto-view-idجيب
ـل ًاوفق يتم أنHTTP redirect.
مساوئوحماسنالتنقلالصريحللصفحات:بتخصيص يسمح الصريح التنقل ولكن أبسط يكون قد الضمين اإلنتقال
أكرب مرونة يعطي هذا ، جافا ملفات يف البحث بدل التنقل لقواعد واحد مكانالشروط إسناد ميكن أنه حيث من
إستخدام وميكن الحقا خمتلفة لصفحاتwildcardsالشرطي التنقل إستخدام أو البدء لصفحات.
مثالعنالتنقلالصريحبنيالصفحات( :http://www.coreservlets.com/JSF-Tutorial/jsf2/)
يفهذااملثالصفحة ،البدايةstart-page-1.xhtml،تتضمنكونةُمإلدخالنصinputTextوزرامروأ
commandButton.إذاأدخلاملستخدمرسالةمكونةمنحمرفأكثر أو نييتمبشكلائيوعشإختيارصفحةلإلنتقال
إليهاويتمفيهاعرضالرسالةاملدخلةوإاليتم فإنهاإلنتقاللصفحةتعرضرسالةخطأ.
من مكون التطبيقManaged BeanهوSimpleController.java:
SimpleController.java
1 package coreservlets;
2
- 5. 3 import java.io.Serializable;
4 import javax.enterprise.context.RequestScoped;
5 import javax.inject.Named;
6 @RequestScoped
7 @Named
8 public class SimpleController {
9 private String message="";
10
11 public String getMessage() {
12 return(message);
13 }
14
15 public void setMessage(String message) {
16 this.message = message;
17 }
18
19 public String doNavigation() {
20 if (message.trim().length() < 2) {
21 return("too-short");
22 } else {
23 String[] results =
24 { "page1", "page2" };
25 return(RandomUtils.randomElement(results));
26 }
27 }
28 }
29
الصفRandomUtils.javaائيوعش بشكل صف من عنصر باختيار يسمح مساعد صف هو.
RandomUtils.java
1 package coreservlets;
2
3 import java.util.Random;
4
5 public class RandomUtils {
6 private static Random r = new Random();
- 6. 7
8 public static int randomInt(int range) {
9 return(r.nextInt(range));
10 }
11
12 public static int randomIndex(Object[] array) {
13 return(randomInt(array.length));
14 }
15
16 public static <T> T randomElement(T[] array) {
17 return(array[randomIndex(array)]);
18 }
19 }
20
صفحات من جمموعة من التطبيق يتألف كذلكوJSFالصفحات هلذه عرض يلي فيم ،.
الصفحةstart-page.xhtml
start-page.xhtml
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml"
4 xmlns:h="http://java.sun.com/jsf/html">
5 <h:head><title>JSF 2.0: Basic Navigation Rules</title>
6 <link href="./css/styles.css"
7 rel="stylesheet" type="text/css"/>
8 </h:head>
9 <h:body>
10 <div align="center">
11 <table border="5">
12 <tr><th class="title">JSF 2.0: Basic Navigation Rules</th></tr>
13 </table>
14 <p/>
15 <h:form>
16 Your message:
17 <h:inputText value="#{simpleController.message}"/>
18 <br/>
- 7. 19 <h:commandButton value="Show Results"
20 action="#{simpleController.doNavigation}"/>
21 </h:form>
22 </div>
23 </h:body>
24 </html>
25
الصفحةresult-page-1.xhtml
result-page-1.xhtml
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml"
4 xmlns:h="http://java.sun.com/jsf/html">
5 <h:head><title>Result Page 1</title>
6 <link href="./css/styles.css"
7 rel="stylesheet" type="text/css"/>
8 </h:head>
9 <h:body>
10 <div align="center">
11 <table border="5">
12 <tr><th class="title">Result Page 1</th></tr>
13 </table>
14 <p/>
15
16 <h2>Your message: "#{simpleController.message}"</h2>
17
18 </div></h:body></html>
19
الصفحةresult-page-2.xhtml
result-page-2.xhtml
- 8. 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml"
4 xmlns:h="http://java.sun.com/jsf/html">
5 <h:head><title>Result Page 2</title>
6 <link href="./css/styles.css"
7 rel="stylesheet" type="text/css"/>
8 </h:head>
9 <h:body>
10 <div align="center">
11 <table border="5">
12 <tr><th class="title">Result Page 2</th></tr>
13 </table>
14 <p/>
15
16 <h2>Your message: "#{simpleController.message}"</h2>
17
18 </div></h:body></html>
19
الصفحةerror-message.xhtml
error-message.xhtml
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml"
4 xmlns:h="http://java.sun.com/jsf/html">
5 <h:head><title>Error: Message Too Short</title>
6 <link href="./css/styles.css"
7 rel="stylesheet" type="text/css"/>
8 </h:head>
9 <h:body>
10 <div align="center">
11 <table border="5">
12 <tr><th class="title">Error: Message Too Short</th></tr>
13 </table>
14 <p/>
- 9. 15
16 <h2>Short message.</h2>
17
18 </div></h:body></html>
19
امللفfaces-config.xml
faces-config.xml
1 <?xml version="1.0"?>
2 <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
5 http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
6 version="2.0">
7
8 <navigation-rule>
9 <from-view-id>/start-page.xhtml</from-view-id>
10 <navigation-case>
11 <from-outcome>too-short</from-outcome>
12 <to-view-id>error-message.xhtml</to-view-id>
13 </navigation-case>
14 </navigation-rule>
15 <navigation-rule>
16 <from-view-id>/start-page.xhtml</from-view-id>
17 <navigation-case>
18 <from-outcome>page1</from-outcome>
19 <to-view-id>result-page-1.xhtml</to-view-id>
20 </navigation-case>
21 <navigation-case>
22 <from-outcome>page2</from-outcome>
23 <to-view-id>result-page-2.xhtml</to-view-id>
24 </navigation-case>
25 </navigation-rule>
26 </faces-config>
27
- 10. إستخدامfrom-action
املثال يف كما، النتيجة نفس خمتلفتني يقتنيرط تعيد قد األحيان بعض يف:
package bean;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class PageController {
public String processPage1() {
return "success";
}
public String processPage2() {
return "success";
}
}
نستخدم احلالة هذه يفfrom-actionاالنتقال حاليت بني للتميز.
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<navigation-rule>
<from-view-id>index.xhtml</from-view-id>
<navigation-case>
<from-action>#{pageController.processPage1}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>page1.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-action>#{pageController.processPage2}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>page2.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
البدل حمرف استخدام*اعدوالق يف
يف الصفحة اسم بدل اعدوالق يف البدل حمرف استخدام املمكن من<from-view-id>التايل املثال يف كما:
<navigation-rule>
- 11. <from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>too-short</from-outcome>
<to-view-id>/view/error-message.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
بداية صفحة أي أجل من تتحقق القاعدة هذد أن أي<from-view-id>.
الشرطي اإلنتقال قواعدConditional Navigation Rules
الومسة استخدام خالل من شرطية انتقال اعدوق يفرتع املمكن من<if>التايل املثال يف كما،:
<navigation-case>
<from-outcome>success</from-outcome>
<if>#{user.newVisitor}</if>
<to-view-id>/welcome-new.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>success</from-outcome>
<if>#{!user.newVisitor}</if>
<to-view-id>/welcome-back.xhtml</to-view-id>
</navigation-case>
النتيجة كانتإذا األوىل احلالة يفsuccessو#{user.newVisitor}أن حيث صحيحةuserهو
ManagedBeanوnewVisitorـل منطقي نوع من خلاصية اسمuser.
ديناميكي بشكل إليها اإلنتقال سيتم اليت الصفحة إسم حتديد إمكانيةDynamic To-Ids
لوالت ملف يف ديناميكي بشكل إليها اإلنتقال سيتم اليت الصفحة حساب املمكن منيفfacse-config.xmlمن بدل ،
إعادة كنتيجةمباشر غري بشكل الصفحة إسم حتديد يتم أن.الصفحة من االنتقال سيتم التايل املثال يف/exam-
question.xhtmlالتعبري تنفيذ من الناتج اإلسم ذات الصفحة إىل#{exam.nextQuestionPage}
<from-view-id>/exam-question.xhtml</from-view-id>
<navigation-case>
<to-view-id>#{exam.nextQuestionPage}.xhtml</to-view-id>
</navigation-case>
- 12. بني الفرقPage Forward vs Page Redirect
الصفحة توجيه إستخدام عندPage Forwardـلا تغيري اليتمURLاجلد الصفحة إىل االنتقال عنديدة.إستخدام عند أما
التوجيه إعادةredirectionPageـلا تغيري يتمURLاجلديدة الصفحة إىل اإلنتقال عند.
يوجد عملي بشكل التوجيه إعاد لتحقيقطرق عدة:
األوىل يقةرالطاخلاصية خالل من ثابت بشكلActionللزر:
<h:form>
<h:commandButton action="page1?faces-redirect=true" value="Page1" />
</h:form>
الثانية يقةرالطال تعيدها اليت القيمة خالل منAction Method:
public String sayHello() {
- 13. if (age < 11) {
helloText = "Hello " + name + "!";
} else {
helloText = "Good Morning " + name + "!";
}
return ("home?faces-redirect=true");
}
يقةرالطالثالثةالومسة استخدام خالل من<redirect />ضمن<navigation-case />
<navigation-rule>
<from-view-id>start.xhtml</from-view-id>
<navigation-case>
<from-outcome>page1</from-outcome>
<to-view-id>page1.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
احملاضرة اجعرم
1. The Java EE 6 Tutorial.
http://download.oracle.com/javaee/6/tutorial/doc/javaeetutorial6.pdf
2. JSF 2.0: Explicit Page Navigation and faces-con_g.xml, available
from:http://www.coreservlets.com/JSF-Tutorial/jsf2/
3. Mastering JavaServer Faces, by Bill Dudney, Jonathan Lehr, Bill Willis, and LeRoy
Mattingly.
4. JSF 2.0 lecture notes by Dr. Beatrice Amrhein, available from:
http://sws.bfh.ch/~amrhein/
5. JSF 2.0 Tutorial, available from: http://www.mkyong.com/jsf2/