使用JSF 2.2动态加载表单

时间:2014-10-29 15:42:26

标签: ajax jsf jsf-2 dynamic-forms

技术背景

我们正在使用JSF 2.2和IBM WAS 8.5.5开发J2E应用程序。

问题

我们开发了一个屏幕以加载不同的形式(12种不同的形式,包括Ajax和其他子形式......)。我们希望能够使用" 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;
    }
}

注意

使用&#34; ui:片段&#34;元素不可用。对我们来说,生成页面需要将近一分钟,而使用完整的ajax则需要将近2,3秒。 所以下面的例子对我们不起作用。

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

1 个答案:

答案 0 :(得分:0)

请尝试使用<ui:decorate template="#{test.page}"/>