【问题标题】:Using Expression Language in SSJS在 SSJS 中使用表达式语言
【发布时间】:2015-09-14 18:46:04
【问题描述】:

在 EL 中引用 bean 属性 (id) 时,我使用 #{bean.id}

我现在需要在该数据前面加上一些静态文本。我通过使用 SSJS 来做到这一点:"sometext" + bean.getId();

有没有办法可以在 SSJS 中使用 EL 表示法?例如"sometext" + #{bean.id};

我意识到在这个例子中它并没有太大的不同,但是当请求更复杂或嵌套的属性时,我认为它会派上用场。

【问题讨论】:

    标签: xpages xpages-ssjs


    【解决方案1】:

    虽然理论上你可以在 SSJS 块中执行任意 EL,但它太丑了,不值得做(可能类似于 facesContext.getApplication().createValueBinding("#{bean.id}").getValue(facesContext))。

    不过,您可以在您想要做的事情符合需要时在同一个属性中混合绑定类型。例如:<xp:text value="#{javascript:doFoo()} some other text #{bean.id}"/>。这将适合您问题的具体情况,但可能不适合实践中的更大需求。

    适合其他情况的相关技术是使用加载时 SSJS(或其他)绑定来生成运行时 EL 绑定。例如:<xp:fileDownload value="${javascript:'#{' + compositeData.dataSource + '.' + compositeData.fieldName + '}'}"/>。同样,这是根据情况而定的,但可能很有用。

    【讨论】:

    • 谢谢杰西。您在第二段中描述的技术非常适合这种情况,因为前置文本是静态的,所以我可以完全取消 SSJS。
    • 自定义语言在这种情况下非常好并且(略微)最佳实践。您只有一个组件,因此处理服务器端的代码更少,性能更好(尽管是最低限度)并且传递给浏览器的 HTML 更少(因为只有一个 HTML 元素)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多