Частичное обновление страницы при навигации (PrimeFaces ajax) - PullRequest
1 голос
/ 16 апреля 2011

Я сделал базовое приложение JSF, используя шаблоны Facelets. Мой шаблон выглядит следующим образом:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets">

    <h:head>
        <!-- Links to CSS stylesheets... -->
        <title><ui:insert name="title" /> - FManager</title>
    </h:head>

    <h:body>
        <div id="wrapper">
            <div id="header"> <b>FManager</b> Application </div>

            <div id="content">
                <p:growl id="growl" />
                <ui:insert name="content">
                    Sample content.
                </ui:insert>
            </div>
        </div>

        <div id="footer">Made using JSF and Primefaces</div>
    </h:body>
</html>

А затем у меня есть Главная страница (показанная ниже), которая переходит на Вторая страница . Обе страницы используют шаблон выше.

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.prime.com.tr/ui"
                template="./template.xhtml">

    <ui:define name="title">Main page</ui:define>

    <ui:define name="content">
        <h2>Welcome to the <b>FManager</b> application</h2>

        <h:form>
            <p>Click the button below to create the first entry!</p>
            <p:commandButton value="Create entry" action="create" />
        </h:form>
    </ui:define>

</ui:composition>

Если я использую <redirect/> вface-config.xml, он перемещается, но страница full перезагружается. Мой вопрос:

Существует ли способ перехода со страницы на другое обновление ТОЛЬКО в <ui:insert> разделах шаблона? (при этом оставшаяся часть страницы остается нетронутой)

Спасибо!

1 Ответ

4 голосов
/ 16 апреля 2011

Вы можете перезагрузить контент с помощью ajax, но URL останется прежним. Если вы можете себе это позволить, обновите код следующим образом:

В template.xhtml, заменить

<div id="content">

от

<h:panelGroup id="content" layout="block">

А в somepage.xhtml заменить

<p:commandButton value="Create entry" action="create" />

от

<p:commandButton value="Create entry" action="create" update=":content" />

Наконец избавьтесь от <redirect /> (на самом деле, предпочитает избавиться от всех случаев навигации, так как они делают файл faces-config.xml раздутым). Кстати, перенаправление также может быть указано в результате, как в action="create?faces-redirect=true".

Это только не обновляет <title>. Однако вы можете сделать это с помощью простой строки JavaScript.

...