Динамическая загрузка форм с JSF 2.2

Технический контекст

Мы разрабатываем приложение J2E с JSF 2.2 и IBM WAS 8.5.5.

Проблема

Мы разработали экран для загрузки различных форм (12 различных форм, включая Ajax и другие подформы...). Мы хотим иметь возможность динамически загружать форму в модальное окно в Ajax, используя тег «ui:include».

К сожалению, действия, связанные с формами, сгенерированными динамически, не выполняются.

Вопросы

  • У кого-нибудь была эта проблема раньше?
  • У вас есть ключ к решению проблемы?
  • Знаете ли вы альтернативу загрузке динамических форм на той же странице?

Код

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

Главная страница (фрагмент)

<ui:composition template="/WEB-INF/templates/globalLayout.xhtml">
    <ui:param name="context" value="publication"/>
    <ui:define name="content">
        <h:form>
            <h:commandLink  value="EDIT1"
                action="#{test.edit()}"  layout="block" >
            </h:commandLink>
            <h:commandLink value="EDIT2"
                action="#{test.edit2()}"  layout="block" >
            </h:commandLink>
            <ui:include src="#{test.page}"/>
        </h:form>
    </ui:define>
</ui:composition>

Подстраница 1 (фрагмент)

<h:outputText value="Page 1 "></h:outputText>
<h:commandLink  value="EDIT1" action="#{test.edit()}"  layout="block" >
</h:commandLink>
<h:commandLink value="EDIT2" action="#{test.edit2()}"  layout="block" >
</h:commandLink>

Подстраница 2 (фрагмент)

<h:outputText value="Page 2 "></h:outputText>
<h:commandLink  value="EDIT1" action="#{test.edit()}"  layout="block" >
</h:commandLink>
<h:commandLink value="EDIT2" action="#{test.edit2()}"  layout="block" >
</h:commandLink>

Управляемый компонент

package com.myapp;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean(name = "test")
@ViewScoped
public class TestManagedBean implements Serializable {

/**
 * 
*/
private static final long serialVersionUID = -3750906342500909173L;

    private String page;
    public void edit() {
        page = "page.xhtml";
    }

    public void edit2() {
        page = "page2.xhtml";
    }

    public String getPage() {
        return page;
    }

    public void setPage(String page) {
        this.page = page;
    }
}

Примечание

Использовать элемент «ui:fragment» нельзя. У нас для создания страницы требуется почти одна минута, тогда как с полным ajax это должно занять почти 2,3 секунды. Таким образом, приведенный ниже пример не работает для нас.

<ui:fragment rendered="#{index.page eq 'page2'}">
    <ui:include src="page2.xhtml"/>
</ui:fragment>

person Laurent    schedule 29.10.2014    source источник


Ответы (1)


Попробуйте вместо этого использовать <ui:decorate template="#{test.page}"/>.

person djejaquino    schedule 24.11.2014