如何在另一个自定义控件中传递和显示自定义控件

时间:2013-05-07 18:43:44

标签: xpages

我正在创建一个应用程序,我想以向导格式向表单添加数据。我将有一系列模态对话框,逐步完成数据输入过程。我正在使用Bootstrap模式对话框。我打算将每个步骤保存到托管bean。应用程序需要在所有设备上运行,这就是我这样做的原因。

我正在尝试创建一个自定义控件来保存模态窗口,然后使用自定义属性将窗口标题,mainContent,按钮标题传递给控件。窗口标题和按钮标题工作正常。 " mainContent" property包含要在窗口中显示的自定义控件的XML代码。我的问题是如何使控件显示实际的自定义控件内容与自定义控件名称的XML字符串。我的目标是制作一个可重复使用的片段。

我尝试过使用'包含页面'这使整个xpage消失。我尝试过使用' dynamicContent'控制,但一直无法使它工作。我没有正确使用该控件的可能性非常明显。我把那段代码留在那里。旁注:xc:xpage上的布局是我的Bootstrap布局,我不认为是因素。

XPage代码 - 所有这些都是调用modalWindow自定义控件:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom">
<xc:layout>
    <xc:modalWindow button_title="Save and Continue to Step 2"
        window_title="Create New PO - Step 1 of 7">
        <xc:this.mainContent><![CDATA[<"xc:NewPO_Step1 />"]]></xc:this.body>
    </xc:modalWindow>
</xc:layout>

以下是自定义控件&#34; modalWindow&#34;

的代码
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
<a href="#myModal" role="button" class="btn" data-toggle="modal">
    Begin Creating New PO
</a>
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog"
    aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal"
            aria-hidden="true">
            ×
        </button>
        <h3 id="myModalLabel">
            <xp:text escape="true" id="computedField3"
                value="#{javascript:compositeData.window_title}">
            </xp:text>
        </h3>
    </div>
    <div class="modal-body">
        <xe:dynamicContent id="dynamicContent1"><xp:text escape="true" id="computedField2" value="#{javascript:compositeData.mainContent}">
</xp:text><xp:this.facets>
</xp:this.facets>
        </xe:dynamicContent>
    </div>
    <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">
            Cancel
        </button>
        <button class="btn btn-primary">
            <xp:text escape="true" id="computedField4"
                value="#{javascript:compositeData.button_title}">
            </xp:text>
        </button>
    </div>
</div>

1 个答案:

答案 0 :(得分:2)

您可以使用“包含页面”将“.xsp”添加到自定义控件的名称中:

<div class="modal-body">
    <xp:include id="include1">
        <xp:this.pageName><![CDATA[${javascript:compositeData.mainContent + ".xsp"}]]></xp:this.pageName>
    </xp:include>
</div>

mainContent="nameOfYourCustomControl"添加到modalWindow调用中,您可以获得所需的灵活性:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom">
        <xc:modalWindow button_title="Save and Continue to Step 2"
            window_title="Create New PO - Step 1 of 7" mainContent="step1">
        </xc:modalWindow>
</xp:view>

在此示例中,您必须创建一个自定义控件“step1”,其中包含所有内容。