2014-10-29 1 views
2

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

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

Проблема

Мы разработали экран для того, чтобы загрузить различные формы (12 Differents формы, которые включают в себя 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> 

Управляемая Bean

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; 
    } 
} 

Примечание

Использование: элемент "щ фрагмент" не пригодной к использованию. Для нас это занимает около одной минуты, чтобы сгенерировать страницу, тогда как с полным ajax это займет около 2,3 секунд. Итак, пример ниже не работает для нас.

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

ответ

0

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