我想知道我是否可以通过编程方式获取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中的属性,而不是从页面级别访问。
答案 0 :(得分: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>
希望这有助于澄清问题。
答案 1 :(得分: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>
答案 2 :(得分:0)
如果您有想要在Xpage的各个部分使用的值,无论是直接在页面上,在自定义控件中还是在重复中,我建议您将值放入sessionScope变量中。这使您可以在用户在Xpage上输入信息时轻松更改它们。
例如,sessionScope.PODocUNID = poDoc.getDocument().getUniversalID();
会将我正在使用的采购订单文档的UNID放入名为PODocUNID的sessionScope变量中。然后,只需在代码中引用sessionScope.PODocUNID,就可以随时提取值。
或者,您可以使用Russ Maher目前最喜欢的玩具Managed Bean(请参阅他的三部分关于9中的Notes的视频,从http://notesin9.com/index.php/2012/11/02/notesin9-084-sharing-managed-beans-in-xpages/开始)