F: ViewAction в пользовательском интерфейсе: композиция

Я обнаружил странное поведение при использовании f:viewAction в ui:composition,

У меня есть главная страница, которая включает в себя композицию. На обеих страницах я определил f:viewAction, но при загрузке страницы запускается только та, что на главной странице.

Это пример кода, который я использовал:

Main.xhtml

<h:head>
    <h:outputLabel value="Test page*******" />
</h:head>
<h:body>
    <ui:include src="/pages/include.xhtml" />
</h:body>
</html>

include.xhtml

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

    <f:metadata>
        <f:viewAction action="#{sample.actionTest2}" />
    </f:metadata>

    <h:outputLabel value="Include" />

</ui:composition>

Образец бобов

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name = "sample")
@SessionScoped
public class SampleBean implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 2458168772774828175L;

    public void actionTest1() {
        System.out.println("Test1");
    }

    public void actionTest2() {
        System.out.println("Test2");
    }
}

Только sample.actionTest1 вызывается.

Версия JSF - Мохарра 2.2.8-02

Я редактирую свой вопрос, чтобы подробно объяснить мой сценарий. В предыдущем вопросе я упустил, для простоты, тот факт, что мне нужно визуализировать только раздел контента.

Модифицированная главная страница:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html">
<f:metadata>
    <f:viewAction action="#{sample.actionTest1}" />
</f:metadata>

<h:head>
    <h:outputLabel value="Test page*******" />
    <h:form>
        <h:commandLink value="Refresh content">
            <f:ajax render=":content" />
        </h:commandLink>
    </h:form>
</h:head>
<h:body>
    <h:panelGroup id="content">
        <ui:include src="/pages/include.xhtml" />
    </h:panelGroup>
</h:body>
</html>

Как вы можете видеть, когда нажата ссылка на команду, должен отображаться только контент. Есть ли возможность использовать f:viewAction выполнить какое-либо действие перед рендерингом в этом сценарии? Сейчас я пользуюсь f:event и это работает прекрасно.

0 ответов

Другие вопросы по тегам