【问题标题】:Best way to bind a non-managed bean to an xPage?将非托管 bean 绑定到 xPage 的最佳方法?
【发布时间】:2013-04-18 08:34:12
【问题描述】:

将非托管 bean 绑定到 xPage 的最佳方法是什么?我们在 java 中使用 xPages 控制器类,并且希望将某些类限制为特定的 xPage,而不使用 faces-config 中的托管 bean。

尝试使用 dataContext 并且某些方法有效,但我们无法获取文档数据源,使用 resolveVariable 方法。它总是返回 doc=null。与托管 bean 相同的 java 类返回正确的数据源。

有没有更好的方法将 bean 连接到特定的 xPage?

【问题讨论】:

  • 很抱歉问这个问题,但这样做有什么理由吗?有什么好处?
  • 当您使用dataContext时,dataContext的范围是什么,dominoDocument数据源的范围是什么?就像托管 bean 的范围限定为查看、会话等一样,dominoDocument 数据源和 dataContext 的范围也可以限定为 XPage、自定义控件、面板等。根据范围,问题可能只是其中一个对另一个。
  • 每个页面构建的时候,我使用一个ViewHandler在viewScope中存储一个新的控制器实例,所以无论是哪个页面,所有的事件都可以绑定到#{viewScope.controller.someMethodName},因为确定使用哪个控制器类的逻辑捆绑在 ViewHandler 中。如果这听起来对您来说是一种可行的方法,请告诉我,我将提供详细的答案,说明这一切如何结合在一起。
  • #Sven:我们想要这样做的原因是我们正在开发一个涉及许多 xPage 和数据库的门户,并且我们希望将某些逻辑限制为特定的 xPage。不知道 faces-config 的大小是否有限制,但如果所有东西都需要进去,感觉它会变得非常负载。 . .

标签: xpages


【解决方案1】:

您可以在beforePageLoad 事件中将您的 Java 控制器与 XPage 连接:

    <xp:this.beforePageLoad><![CDATA[#{javascript:
        viewScope.controller = new com.yourdomain.controller.MyController();
        controller.beforePageLoad()}]]>
    </xp:this.beforePageLoad>

然后你可以像这样使用 EL 调用你的控制器的方法:

#{controller.save}

或者您可以将某些事件与您的控制器连接:

<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    afterPageLoad="#{controller.afterPageLoad}"

您的控制器有权访问文档数据源。

    public void save() throws Exception {
        DominoDocument doc = (DominoDocument) JsfUtil.resolveVariable("currentDocument");
        System.out.println("save(" + doc.getDocument().getUniversalID() + ")");
    }

【讨论】:

  • 感谢您的回复,有没有在 beforePageLoad 事件中连接 jave 控制器的例子?
猜你喜欢
  • 2017-03-30
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
相关资源
最近更新 更多