Условное правило навигации в JSF 2.0
JSF 2 поставляется с очень гибким условным правилом навигации для решения сложного потока навигации по страницам, см. Следующий пример правила условного перехода:
1. Страница JSF
Простая страница JSF с кнопкой для перехода с этой страницы на страницу оплаты.
start.xhtml
This is start.xhtml
2. Управляемый Боб
Управляемый компонент, предоставляющий примеры данных для выполнения условной проверки в правиле навигации.
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.Serializable;
@ManagedBean
@SessionScoped
public class PaymentController implements Serializable {
private static final long serialVersionUID = 1L;
public boolean registerCompleted = true;
public int orderQty = 99;
//getter and setter methods
}
3. Условное правило навигации
Обычно вы объявляете простое правило навигации в файлеface-config.xml следующим образом:
start.xhtml payment payment.xhtml
С помощью JSF 2 вы можете добавить условную проверку, прежде чем она перейдет на страницу оплаты, см. Следующее:
faces-config.xml
start.xhtml payment #{paymentController.orderQty < 100} ordermore.xhtml payment #{paymentController.registerCompleted} payment.xhtml payment register.xhtml
Это соответствует следующему коду Java:
if (from-view-id == "start.xhtml"){
if(from-outcome == "payment"){
if(paymentController.orderQty < 100){
return "ordermore";
}else if(paymentController.registerCompleted){
return "payment";
}else{
return "register";
}
}
}
Код должен быть достаточно понятным.
Note
В правиле условной навигации последовательность правила навигации действительно влияет на поток навигации, всегда ставьте наивысший приоритет проверки вверху.
4. тестирование
Различные наборы данных для тестирования:
Пример 1
public class PaymentController implements Serializable {
public boolean registerCompleted = true;
public int orderQty = 99;
...
Когда кнопка нажата, она попадает в критерий «paymentController.orderQty < 100» и переходит на страницу «ordermore.xhtml».
Пример 2
public class PaymentController implements Serializable {
public boolean registerCompleted = true;
public int orderQty = 200;
...
Когда кнопка нажата, она попадает в критерий "paymentController.registerCompleted" и переходит на страницу "payment.xhtml".
Пример 3
public class PaymentController implements Serializable {
public boolean registerCompleted = false;
public int orderQty = 200;
...
Когда кнопка нажата, она не прошла все критерии проверки и переходит на страницу «register.xhtml».
Предложение
В JSF 2.0 нет тега «else» в правиле условной навигации, хотелось бы, чтобы команда JSF могла включить тег «else» в будущую версию. Например,
start.xhtml payment #{paymentController.orderQty < 100} ordermore.xhtml #{paymentController.registerCompleted} payment.xhtml register.xhtml
Кроме того, он должен включать в себя несколько условных проверок, как это
start.xhtml payment #{paymentController.orderQty < 100} && #{paymentController.xxx} ordermore.xhtml #{paymentController.registerCompleted} payment.xhtml register.xhtml
Thought…
Правило условной навигации JSF 2,… очень похоже на Spring Web Flow, верно? :)
Скачать исходный код
Скачать -JSF-2-Conditional-Navigation-Example.zip (11 КБ)