【问题标题】:Access a component of a custom control访问自定义控件的组件
【发布时间】:2014-12-09 12:56:44
【问题描述】:

我有一个自定义控件,我将在其中调用 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").first);

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

我已经完成了 getComponent("ccViewTemplate") 并且我有自定义控件的句柄,但是 getComponent("ccViewTemplate").getComponent("RepeatData").first 失败。那么有没有办法从自定义控件“外部”的自定义控件“内部”的组件中提取值? 再看一点,发现了这个:

var rtn = getComponent("ccViewTemplate").getPropertyMap().getProperty("repeatData");

如果我添加,它不会产生错误但什么也不返回

var rtn = getComponent("ccViewTemplate").getPropertyMap().getProperty("repeatData").first;

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

希望这是有道理的。

【问题讨论】:

  • 您不能直接访问 sessionScope.ssFirst 变量,还是使用管理 ssFirst 变量并在那里进行必要检查的 java bean?或许还可以将 value 和 first 变量作为参数放入 URL 并允许默认值以防找不到?
  • Greg - 问题是从按钮设置 first 的值。该按钮位于一个自定义控件中,该自定义控件包含在另一个包含重复的自定义控件中,因此该按钮无法访问重复以找出它的第一个设置。

标签: xpages xpages-ssjs getproperties


【解决方案1】:

据我了解,这对于 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 值并更改视图参数和重定向。

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

【讨论】:

    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多