访问自定义控件的组件

时间:2014-10-14 16:32:07

标签: xpages xpages-ssjs getproperties

我有一个自定义控件,我将其中的代码称为ccViewTemplate:

<xp:repeat id="repeatData" rows="30"
    value="#{viewEntry}" var="veData"
    first="#{javascript:return (sessionScope.ssFirst != null)?sessionScope.ssFirst:0;}">
<xp:panel id="panelSelect">
<xp:callback facetName="viewBodyFacet" id="callback1"></xp:callback>
</xp:panel><!-- panelSelect -->
</xp:repeat>

数据库视图(viewEntry)也在ccViewTemplate中定义,并基于多个自定义属性进行定义。然后将ccViewTemplate添加到另一个名为ccFinalView的自定义控件中。输入自定义属性的位置,并将显示内容输入viewBodyFacet。我可以访问veData,到目前为止一切都很好。在viewBodyFacet我有一个链接,它执行重定向打开文档,也可以正常工作。但是,在链接中我想获取repeatData属性优先并存储它,以便它返回到重复的正确页面。我使用这段代码:

sessionScope.put( 'ssFirst',getComponent( “repeatData”)第一);

但是,代码找不到getComponent(“repeatData”),因为它位于ccViewTemplate内部且无法访问。有没有办法在包含ccViewTemplate的ccFinalView中从ccViewTemplate获取组件repeatData。

我已经完成了getComponent(“ccViewTemplate”)并且我有自定义Control的句柄,但是 getComponent(“ccViewTemplate”)。getComponent(“RepeatData”)。首先失败。那么有没有办法从客户控件的“外部”从自定义控件内部的组件中提取值? 看得更远,发现了这个:

var rtn = getComponent(“ccViewTemplate”)。getPropertyMap()。getProperty(“repeatData”);

如果我添加

,它不会生成错误但不会返回任何内容

var rtn = getComponent(“ccViewTemplate”)。getPropertyMap()。getProperty(“repeatData”)。first;

我得到一个错误getComponent()为null

希望这是有道理的。

1 个答案:

答案 0 :(得分:0)

据我所知,这对于java bean来说是一个完美的工作。 bean甚至可以保留默认值。

public class Controller{

public String value;

public Controller(){
value = "default_value";
}

public String getValue(){return value;}
public void setValue(String value){this.value=value}

}

以这种方式,只要创建对象,该值就可用。按下按钮然后用javascript,

设置值
ControllerBean.setValue("thisValue");

你可以读取值

ControllerBean.getValue();

此问题显示如何配置bean:How to set up a managed bean to work with Notes document

通过将此设置为,例如viewScope,您可以随时随地访问该值,无论它是否位于自定义控件或主页中。我强烈推荐这种方法。它只是意味着可能需要重新思考您的自定义控件结构。

修改
额外的想法包括保持观点的枚举,

public enum Views{
VIEW_1("viewAlias", "urlParam")

private String vwAlias;
private String urlParam;
private Views(String alias, String param){
vwAlias = alias;
urlParam = param;
} 

// public getters
}

然后在您的控制器中,您可以获得视图字符串:

1. By seeing if a view param is included in the URL
2. If a cookie value is set
3. Take the hard coded default

单击更改视图操作,然后设置cookie值并更改视图参数并重定向。

这是所有额外的想法,但它是我构建视图控制器的方式。我很快就会做一个教程。