Графический интерфейс одностраничного приложения JSF

В настоящее время я разрабатываю одностраничное приложение в JSF 2 (Primefaces, CDI EJB и JPA). Приложение (страница) имеет несколько сложных рабочих процессов за кулисами.

Например, если пользователь вводит какие-то данные, должно появиться диалоговое окно, которое сначала запрашивает подтверждение, а затем выполняет какой-то рабочий процесс в зависимости от ответа. Внутри рабочего процесса также могут появляться некоторые другие диалоги в зависимости от вставленных данных или некоторых значений базы данных.

Мой вопрос:

Существуют ли какие-либо передовые методы реализации такого механизма рабочего процесса. (Только что посмотрел конечный автомат шаблона GoV и проект activiti)

С Уважением


person urbiwanus    schedule 08.08.2012    source источник


Ответы (3)


Вы можете использовать имена представлений в качестве возвращаемого значения методов действия на основе ваших условий, чтобы JSF отображал эти представления, соответствующие имени вашего возвращаемого значения.

Обработка вашего рабочего процесса может быть выполнена с помощью кода Java или объявления вашего потока в Faces-config.xml

для java пример: (Динамическая навигация)

public String yourActionMethod(){
   if(condition1){
       return "view1";
   }else if(condition2){
       return "view2";
   }else if(conditionN){
       return "viewN";
   }
}

для примера XML: (статическая навигация)

<navigation-rule>
   <from-view-id>/index.xhtml</from-view-id>
   <navigation-case>
      <from-outcome>success</from-outcome>
      <to-view-id>/welcome.xhtml</to-view-id>
   </navigation-case>
   <navigation-case>
      <from-outcome>failure</from-outcome>
      <to-view-id>/failed.xhtml</to-view-id>
   </navigation-case> 
</navigation-rule>

Для вашего варианта использования динамическая навигация (с использованием кода Java) хороша.

Если вы хотите отображать диалоги на основе условий на стороне сервера, вы можете использовать sth следующим образом:

public void doSomething(ActionEvent actionEvent) {
    RequestContext context = RequestContext.getCurrentInstance();
    context.execute("dialogVar.show()");
}

если ваш вариант использования более сложен и у вас сложный рабочий процесс, попробуйте использовать Activiti и получить выходные данные от него в качестве ваших ViewId и вернуть их в методе действия, чтобы JSF отобразил их.

Вы также можете написать свой собственный конечный автомат и получить его выходные данные и вернуть его в свой метод действия как свой ViewId.

person Mehdi    schedule 09.08.2012

Я считаю, что этот пост в блоге связан с тем, что вы хотите сделать, и он может помочь:

«Page-Flow против Process-Flow — чем может помочь посредник пользовательского интерфейса» http://www.bpm-guide.de/2012/04/04/pageflow-vs-process-flow-and-ui-mediator-pattern/

person Rafael Cordones    schedule 09.08.2012

JSF 2.2 предоставит механизм области действия под названием Faces Flows.

который соответствует моим потребностям, спасибо за помощь

person urbiwanus    schedule 24.10.2012