導航規則
導航規則是向導組件的核心。這些規則必須包含在應用程序的 faces-config.xml 文件中。下面是演示應用程序規則的一個子集。您可以使用這些規則作為起點來在 您自己的應用程序中利用向導組件。
/main.jsp
If the action returns “next”, goto firstSelection.jsp
next
/firstSelection.jsp
/firstSelection.jsp
If the action returns “next”, goto secondSelection.jsp
next
/secondSelection.jsp
If the action returns “back”, goto main.jsp
back
/main.jsp
導航規則描述瞭如何根據動作的調用位置來處理動作,如下所示:
如果動作在 “”main.jsp” 頁面調用並返回 “next”,則導航處理程序呈現 “firstSelection.jsp” 頁面
如果動作在 “firstSelection.jsp” 頁面調用並且返回“back”,則我們轉到主頁面
如果調用的動作返回 “next”,我們將轉到 “secondSelection.jsp” 頁面
動作
您可以回想到在工作流程圖中首頁面是特殊的,因為工作流程可以使得該頁面重新加載。當用戶希望向字符表中添加字符時就會重新加載首頁面。這一添加是通過在 頁面中放置一個按鈕 來實現的,在按鈕被按下時引發相應的動作。
在 “main.jsp” 頁面中,您可以看到該按鈕的聲明:
實際的動作處理程序的實現在 ModelBean.java 文件中。“addCustomName”方法將 name 添加到表格中。
public void addCustomName(ActionEvent event) throws AbortProcessingException {
if ((customName != null) && (!customName.trim().equals(“”))) { customName = customName.trim();
//check to see if name already exists in list
Iterator iter = dataList.iterator();
while (iter.hasNext()) {
CharacterBean item = (CharacterBean) iter.next();
if (item.getName().equals(customName)) {
reset();
return;
}
}
//create new entry
CharacterBean item = new CharacterBean();
item.setName(customName);
item.setSpecies((SpeciesBean)
speciesPropertyMap.get(customSpecies));
dataList.add(item);
}
}
當調用帶有動作監聽器的 CommandButton 時,就會調用動作程序。“addCustomName”方法遍歷已有字符的列表,如果沒有在列表中發現新的名字,它就創建一個新的 Character 條目。
如果這個動作處理程序有一個返回值,導航處理程序可以用該值來決定下一個動作並根據結果來決定導航的方向。在這個特殊的例子中沒有返回值,因為隻是重新顯示同一個頁面,但是添加瞭一個新的用戶名條目。動作 處理程序和導航處理程序的設計決定瞭它們可以輕松地互操作。