1

我想知道是否可以通过编程方式获取 xpage 或自定义控件的参数和/或属性。

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" id="layout">

<xp:this.properties>
    <xp:parameter name="testcc.xsp" value="Test 1"></xp:parameter>
    <xp:parameter name="index.xsp" value="Main"></xp:parameter>
</xp:this.properties>
...

如何访问此参数列表以在重复控制中使用它?

编辑 你们都是对的,谢谢!但这仅适用于页面,不适用于自定义控件。

编辑

你们俩都很棒:-)

但是:我应该修改我的问题:我有一个自定义控件,我在其中定义了属性。在 SAMe 自定义控件中,我想在重复控件中访问这些属性。

您的两个答案似乎都假设对这些属性的访问来自视图(页面)级别,对吗?

我测试了 Svens 方式 - 如果我从页面级别访问 CC 中的道具,则此方法有效。

编辑

所以这是CC的代码:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

<xp:this.properties>
    <xp:parameter name="param" value="val"></xp:parameter>
</xp:this.properties>

<xp:label value="#{javascript:facesContext.getProperty('param')}"
    id="label1">
</xp:label>

</xp:view>

如您所见,我只想访问 CC itselt 中的属性,而不是从页面级别访问。

4

3 回答 3

5

您可以通过访问facesContext来获取属性:

facesContext.getProperty("index.xsp")

编辑:

如果在自定义控件中设置属性,则不会将属性添加到视图根。它们被设置为自定义控件 ( com.ibm.xsp.component.UIIncludeComposite ) 的属性。

要访问它们,您首先必须为您的 CC 提供一个 ID:

<xc:ccProp id="myId" />

这允许您使用getComponent()方法像访问组件一样访问自定义控件并检索包含属性的属性属性

<xp:label id="labelProperty">
    <xp:this.value><![CDATA[#{javascript:
        var cc:com.ibm.xsp.component.UIIncludeComposite = getComponent("myId");
        var arrList:java.util.ArrayList = cc.getAttributes().get("properties");
        arrList.get(0).getName()}]]>
    </xp:this.value>
</xp:label>

编辑2:

如果您不想为 CC 提供 ID,则可以通过这种方式访问​​ CC(在此示例中是标签的父级):

自定义控件的代码:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:this.properties>
        <xp:parameter name="param" value="val"></xp:parameter>
    </xp:this.properties>

    <xp:label id="label1">
        <xp:this.value><![CDATA[#{javascript:
            this.parent.getAttributes().get("properties").get(0).getName()
       }]]></xp:this.value>
   </xp:label>

    <xp:label id="label2">
        <xp:this.value><![CDATA[#{javascript:
            this.parent.getAttributes().get("properties").get(0).getValue()
       }]]></xp:this.value>
   </xp:label>

</xp:view>

希望这有助于澄清问题。

于 2013-03-01T17:47:06.097 回答
1

要获取属性列表,您可以使用view.getProperties(). 它返回一个对象java.util.List,您可以使用该对象循环各个属性(它们是 的对象com.ibm.xsp.complex.Parameter)。下面是片段。

var allProperties:java.util.List = view.getProperties();
for (var i=0 ; i<allProperties.size() ; i++) {
    var property:com.ibm.xsp.complex.Parameter = allProperties.get(i);

    // property.getName();
    // property.getValue();
}

如果你想重复它,那么你可以将它绑定到view.getProperties()然后获取它的各个值。您的代码将如下所示:

<xp:repeat rows="30" value="#{javascript:view.getProperties()}" var="property">
    <xp:text escape="true">
        <xp:this.value><![CDATA[#{javascript:property.getName() + " - " + property.getValue();}]]></xp:this.value>
    </xp:text>
    <xp:br></xp:br>
</xp:repeat>
于 2013-03-01T17:48:54.890 回答
0

如果您有想要在 Xpage 的各个部分使用的值,无论是直接在页面上、在自定义控件中还是在重复中,我建议您将这些值放入 sessionScope 变量中。这使您可以在用户在 Xpage 上输入信息时轻松更改它们。

例如,sessionScope.PODocUNID = poDoc.getDocument().getUniversalID();将我正在使用的采购订单文档的 UNID 放入名为 PODocUNID 的 sessionScope 变量中。然后,您可以随时通过简单地在代码中引用 sessionScope.PODocUNID 来提取值。

或者,您可以使用 Russ Maher 目前最喜欢的玩具 Managed Bean(参见他关于 Notes in 9 的三部分视频,从以下网址开始:http: //notesin9.com/index.php/2012/11/02/notesin9-084 -shared-managed-beans-in-xpages/ )

于 2013-03-02T20:07:53.553 回答