Как динамически обновлять JSF страницу?

429
30 декабря 2016, 10:32

Есть Бд оттуда принимаются данные на Jsf но когда в бд записывается запись из утсровта то Jsf страницу надо обнавть чтоб там отобразились изменеия не моглиб вы мне помоч разобраться с этим ,узнал что есть спец скрипты для этого Ajax но их много и какой где как использовать незнаю

вот моя разметка

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:link outcome="create" value="Insert a new employee"/>
        <h:form>
            <h:dataTable value="#{empControl.lst}" var="em">
                <h:column>
                    <f:facet name ="header">ID</f:facet>
                    #{em.id}
                </h:column>
                 <h:column>
                    <f:facet name ="header">Name</f:facet>
                    #{em.name}
                </h:column>
                 <h:column>
                    <f:facet name ="header">Address</f:facet>
                    #{em.addr}
                </h:column>
                 <h:column>
                    <f:facet name ="header">Email</f:facet>
                    #{em.email}
                </h:column>
                 <h:column>
                    <f:facet name ="header">Phone</f:facet>
                    #{em.phone}
                </h:column>
                <h:column>
                    <f:facet name="header">Actions</f:facet>
                    <h:commandLink value="Remove" action="#{empControl.remove(em)}" onclick="return confirm('Are you sure')"></h:commandLink>
                    <h:commandButton value ="Edit"
                                     action="#{empControl.edit(em)}"></h:commandButton>
                </h:column>
            </h:dataTable>
            </h:form>
        </h:body>
</html>

как сделать чтоб она обновялась как в бд чтото добавят и сразу отображала а ненадо было обновть страницу .Спасибо благодарю за помощ.

П.С за свой Русский прошу прошения

Answer 1

Есть несколько вариантов решения задачи.

  1. Периодический опрос сервера на наличие изменений данных. Например, в Primefaces, это можно сделать с помощью компонента poll. Этот подход наиболее прост в реализации, но решает задачу не самым эффективным образом - информационный обмен между клиентом и сервером будет происходить независимо от того, изменились данные или нет, что вызовет дополнительную нагрузку. Тем не менее, я бы рекомендовал использовать именно этот вариант для быстрой реализации задачи, т.к. не следует делать преждевременную оптимизацию функции, неэффективность которой не доказана тестами или промышленной эксплуатацией. Если впоследствии окажется, что нагрузка слишком высокая - то можно перейти к варианту 2.
  2. Использование сокетов. Это более правильный вариант с точки зрения эффективности использования ресурсов. Но при этом и более сложный в реализации. Могу предложить 2 направления для изучения этой темы:

    а) Использование Javascript и спецификаций Java EE, без каких-то специфических компонентов. Пример есть здесь. Это простое приложения чата. Можно приспособить его под Вашу задачу - когда происходит событие добавления записи в таблицу, на страницу отправляется сообщение. В Вашем случае, вместо обновления компонента чата, должно вызываться обновление dataTable. Для варианта а) потребуется развернуть ваше приложение под управлением сервера приложений, реализующего спецификацию JEE 7 Web profile, например - Wildfly 10. Альтернативный вариант - подключение вручную требующихся компонентов в ваше приложение (не рекомендую, можно потерять немало времени на этом).

    б) Использование компонента фреймворка Primefaces Notify. Общий принцип работы компонента такой же, что в варианте а), но данный вариант может более гармонично вписаться на JSF-страницу.

PS Если решили писать JSF-приложение, настоятельно рекомендую использовать Primefaces - там реализовано огромное количество типовых компонентов и функций, которых достаточно для разработки большинства типов приложений.

READ ALSO
Проблема с &ldquo;поделиться&rdquo; в Facebook

Проблема с “поделиться” в Facebook

Вечер добрый такая проблема, при добавлении кнопки "поделится" на Facebook у меня он вставляет неправильную картинку, вставляет картинку банка...

394
ограничение доступа авторизации php [требует правки]

ограничение доступа авторизации php [требует правки]

Как посредством php запретить запуск скрипта на определенное время,если до этого он был запущен допустим 3 раза за некий промежуток времени?...

360