2014-10-29 109 views
2

是技術問題與JSF 2.2

我們正在開發一個應用J2E用JSF 2.2和IBM形態的動態負荷爲8.5.5。

問題

我們以加載不同的形式(包括Ajax和其他子窗體... 12組型動物的形式)開發的屏幕。我們希望能夠使用「ui:include」標籤在Ajax的模式框中動態加載表單。

不幸的是,與那些動態生成的表單相關的操作不會被執行。

的問題

  • 難道有人有這個問題前面?
  • 你有解決問題的線索嗎?
  • 你知道在同一頁面加載動態表單的替代方法嗎?

代碼

我們構建出我們有問題,一個簡單的例子。

主頁(片段)

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

注意

使用 「UI:片段」 元素是不可用的。對我們來說,生成頁面需要將近一分鐘,而使用完整的ajax則需要將近2,3秒。 所以下面的例子不適合我們。

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

回答

0

嘗試使用<ui:decorate template="#{test.page}"/>來代替。