【问题标题】:can I read values from a properties file in faces-config.xml file?我可以从 faces-config.xml 文件中的属性文件中读取值吗?
【发布时间】:2021-11-22 06:28:52
【问题描述】:

在我的 Xpages 应用程序中,我想通过读取 Notes 文档中的值来计算 faces-config.xml 中的值。由于它是一种应用程序配置类型的文档,因此是我认为@DBLookup 函数可以做的唯一文档,例如:

@DbLookup(@DbName(),"Profile View","Profile Document","debug","[FAILSILENT]");

但是,由于我已将所有对视图设计元素的引用放置在属性文件中,因此我可以在 1 个位置更新它们,而不是在我的应用程序中使用硬编码引用,我也会避免在 @DbLookup 中使用硬编码引用功能。

通常我会通过使用键 (vw_ProfileDoc) 收集值来获取视图,如下所示:

var viewName = datasources["vw_ProfileDoc"];

数据源资源是在我的 XPage 级别上定义的,方法是将其声明为资源包的变量,例如:

<xp:bundle src="/datasources.properties" var="datasources"></xp:bundle>

所以它在加载 XPage 时变得可用。

如果我想在 faces-config.xml 中尝试类似:

<managed-property>
      <property-name>debug</property-name>
      <value>#{javascript:var vw = datasources["vw_ProfileDoc"];@DbLookup(@DbName(),vw,"ProfileDoc","debug","[FAILSILENT]");}</value>
      <property-class>java.lang.Boolean</property-class>
    </managed-property>

我很可能会收到 404 错误,因为未设置数据源变量。

有没有办法从 faces-config.xml 文件中读取 datasources.properties 文件?

【问题讨论】:

    标签: xpages xpages-ssjs


    【解决方案1】:

    我将数据库的Resources/Files 用于此类用例。创建一个文件“settings.properties”,设置如下:

    debug = true
    whatever = abc
    

    您可以使用 Java 代码轻松访问这些值

            ResourceBundle bundle = ExtLibUtil.getXspContext().bundle("settings"); 
            if (bundle != null) {
                boolean isDebug = "true".equals(bundle.getString("debug"));
                String whatever = bundle.getString("whatever");
                ...
    

    【讨论】:

    • 是的,但我想让调试更加动态,因此我不必在生产环境中设计应用程序(由于安全设置,我没有该权限)。所以我基本上想在我觉得合适的时候关闭/打开它,例如以获得用户支持。
    • 我理解,尽管您询问处理 faces-config.xml 并且这不是您可以轻松关闭/打开调试标志的地方。对于这种情况,我使用一个代理来设置应用程序范围标志开/关,Java 类会检查该标志的某些调试点。
    • 该代理的外观如何,还是“xpages”代理?
    • 是的,“XPages”代理 = 调用作为 XPage-Java 代码实现的 HTTP-REST 服务的代理。 Client XPages 应用程序可以调用相同的 REST-URL。
    【解决方案2】:

    不确定为什么要在 faces-config.xml 中这样做?据我所知,您无法在该文件中执行任何动态操作!

    您可以使用 Knut 的建议,效果很好。

    我所做的是在数据库中有某种配置文档,我可以使用它来设置一个标志(实际上是多个标志)...

    然后在我的应用程序中,我有一个应用程序范围的 bean,它将在启动时读取此信息(并且可以具有重置或重新读取的逻辑,或者如果设置刚刚更改,您需要“发现”的任何内容)。然后在我的 XPages 和 Java 代码中,如果设置了调试,我只询问应用程序范围 bean 的属性 - 然后根据它做任何我必须做的事情。简单又干净:-)

    对于您在对 Knut 的回答的评论中提到的情况,我已经做好了准备,我可以直接在生产环境中从应用程序内部增加日志记录需求。

    /约翰

    【讨论】:

    • 您可以使用 ssjs 计算值或从其他 bean 注入值。但我希望 tso 计算将启动的第一个 bean。
    • @PatrickKwinten,我认为 faces-config.xml 在任何动态逻辑可用之前就被读取了...但是,如果您使用应用程序范围的 bean,那么它将在第一个参考 - 所以你当时做的任何事情都将是“第一个”
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2012-10-01
    • 2013-12-24
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多