Можно ли совместить новую функцию JSF 2.2 Faces Flow с Ajax?
Пример использования: мастер встроен в панель на странице. По мере того, как пользователь проходит через мастер, обновляется только панель, а не вся страница.
Можно ли совместить новую функцию JSF 2.2 Faces Flow с Ajax?
Пример использования: мастер встроен в панель на странице. По мере того, как пользователь проходит через мастер, обновляется только панель, а не вся страница.
Я сам просматриваю этот маршрут и провел некоторое исследование. Короткий ответ: Да, вы можете использовать ajax как для частичной обработки, так и для частичного рендеринга. Вот рабочий пример:
@ApplicationScoped
public class MyFlow implements Serializable {
@Produces @FlowDefinition
public Flow defineFlow(@FlowBuilderParameter FlowBuilder flowBuilder) {
flowBuilder.id("", "myFlow");
flowBuilder.viewNode("flowP1", "/flowPage1.xhtml").markAsStartNode();
return flowBuilder.getFlow();
}
}
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>View within Flow Ajax test</title>
</h:head>
<h:body>
<h:form>
<h:panelGrid columns="2">
<p:commandButton value="Flow Action Method" action="#{myFlowBean.flowActionMethod}" update="flowText"/>
<p:commandButton value="View Action Method" action="#{myViewBean.viewActionMethod}" update="viewText"/>
<h:outputText id="flowText" value="#{myFlowBean.flowValue}" />
<h:outputText id="viewText" value="#{myViewBean.viewValue}" />
</h:panelGrid>
</h:form>
</h:body>
</html>
Flow-Scope Bean
@Named
@FlowScoped("myFlow")
public class MyFlowBean implements Serializable{
private String flowValue;
@PostConstruct
public void init(){
System.out.println("MyFlowBean PostConstruct");
}
public void flowActionMethod(){
System.out.println("flowActionMethod called");
//flowValue = "Flow Value Set";
}
public String getFlowValue() {
return flowValue;
}
public void setFlowValue(String flowValue){
this.flowValue = flowValue;
}
}
Бин с областью просмотра
@Named
@ViewScoped
public class MyViewBean implements Serializable {
private @Inject MyFlowBean flowBean;
private String viewValue;
@PostConstruct
public void init(){
System.out.println("MyViewBean PostConstruct");
}
public void viewActionMethod(){
System.out.println("viewActionMethod called");
viewValue = "View Value Set";
flowBean.setFlowValue("Flow Value Set");
}
public String getViewValue() {
return viewValue;
}
}
Перейдите к потоку, используя «myFlow» в качестве навигационного варианта из любого места за пределами потока. После отображения файла flowPage1.xhtml выполните следующие действия, чтобы продемонстрировать использование AJAX:
Ознакомьтесь с этим основным объяснением Faces Flow:
Faces Flow обеспечивает инкапсуляцию связанных представлений/страниц с точками входа и выхода, определяемыми приложением. Например, корзина оформления заказа может состоять из страницы корзины, страницы сведений о кредитной карте, страницы адреса доставки и страницы подтверждения. Все эти страницы вместе с необходимыми ресурсами и bean-компонентами можно упаковать вместе в виде модуля, который затем можно повторно использовать в других приложениях.
Лично я еще не пробовал, однако, поскольку это инкапсуляция представлений, имеет смысл, что у вас не будет возможности использовать Ajax для переходов потока.
Представление в JSF 2.x предназначено для того, чтобы оставаться в живых до тех пор, пока его контроллер (бэкинг-компонент), стоящий за ним , не возвращает новый результат. значение. Однако сам поток определяет комбинацию результатов, которую вы разрешаете в своем приложении. Единственный способ использовать Ajax — не уничтожать представление, которое у вас уже есть, а поток делает это для каждого отдельного перехода.
Чтобы достичь того, чего вы хотите, вы должны реализовать свое руководство, используя один вспомогательный компонент @ViewScoped
и только страницу просмотра jsf с условиями рендеринга.
Я видел, как ребята из проекта liferay используют (рекомендуют) эту функцию для управления базовыми портлетами мастера.
http://www.liferay.com/web/neil.griffin/blog/-/blogs/three-cheers-for-jsf-2-2-faces-flows