Я использую PrimeFaces 3.5, и у меня возникла проблема с частичным отображением страницы. Мне нужно загрузить контент из файла Facelet в «динамическую» часть шаблона.частичный рендеринг страниц (PPR) с face-redirect
index.xhtml
:
<f:view>
<h:form id="form1">
<p:outputPanel layout="block">
<p:commandButton action="content-2?faces-redirect=false" update="display" />
</p:outputPanel>
<p:outputPanel id="display" layout="block">
content 1
</p:outputPanel>
</h:form>
</f:view>
content-2.xhtml
:
<h:body>
content 2 loaded
</h:body>
Когда я нажимаю на <p:commandButton>
, то будет открыт content-2.xhtml
. Однако это обновляет всю страницу. Ответ XML содержит, как это:
<partial-response><changes><update id="javax.faces.ViewRoot">
Когда я изменить атрибут action
к выражению метода:
<f:view>
<h:form id="form1">
<p:outputPanel layout="block">
<p:commandButton action="#{myBean.increment}" update="display" />
</p:outputPanel>
<p:outputPanel id="display" layout="block">
#{myBean.count}
</p:outputPanel>
</h:form>
</f:view>
Тогда display
обновления блока, как ожидалось. Ответ XML содержит, как это:
<partial-response><changes><update id="form:display">
Почему обновить action="content-2?faces-redirect=false"
путь всей страницы?
Я также пытался использовать <ui:composition>
, но в этом случае это перезагружает «статическую» часть шаблона. Я не хочу этого.
Вы подразумеваете, что '# {myBean.method}' возвращает 'content-2.xhtml'? «Faces-redirect = false» уже по умолчанию, я не понимаю, почему вы прямо упоминаете об этом. Вы подразумеваете, что 'action =" content-2.xhtml "' ведет себя по-другому? – BalusC
Нет, извините, я обновил часть, которая с # {myBean.method}. Тело метода выглядит как 'count ++'. И я попробую 'action =" content-2.xhtml "' его также обновить 'javax.faces.ViewRoot', но' action = "# {myBean.increment}" 'refresh' display'. Я думал, что 'faces-redirect = false' должно иметь назначение' true' или 'false'. – Mrusful