2014-10-29 72 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}"/>来代替。