xpages - SSJS 脚本库中的全局变量未按预期工作

标签 xpages

使用 8.5.3 UP1。我在使用 SSJS 脚本库时遇到问题,该脚本库用于“hide/when”或更准确地说是在 xpages“show/ifs”中。无论如何,全局变量似乎采用我上次保存脚本库时的值。他们似乎没有根据文档的当前值进行计算。这是已知的事情吗(显然我不知道。)。以下是演示该问题的示例页面和脚本库:

示例 XPage:

<xp:this.resources>
    <xp:script src="/ssjsVisTest.jss" clientSide="false"></xp:script>
</xp:this.resources>
<xp:inputText id="inputText1" value="#{document1.StatusTX}"></xp:inputText>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:button value="Save" id="SaveBtn">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="complete">
        <xp:this.action>
            <xp:saveDocument var="document1"></xp:saveDocument>
        </xp:this.action>
    </xp:eventHandler>
</xp:button>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:label id="label1" value="Status is Draft"
    rendered="#{javascript:statusVisibleDraft()}">
</xp:label>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:label id="label2" value="Status is Pending"
    rendered="#{javascript:statusVisiblePending()}">
</xp:label>
<xp:br></xp:br>
<xp:br></xp:br>
</xp:view>

SSJS 脚本库示例:

var status = document1.getItemValueString('StatusTX');

function statusVisibleDraft() {

x = (status == "Draft") ? 1 : 0;

if(x > 0) {
    return true;
} else {
    return false;
}
}

function statusVisiblePending() {

x = (status == "Pending") ? 1 : 0;

if(x > 0) {
    return true;
} else {
    return false;
}
}

有什么想法吗?谢谢

最佳答案

脚本库中的变量本质上是 transient 的。根据系统负载,库可能会在调用之间卸载。全局变量的正确位置是作用域(这就是它们的用途)。在您的示例中, View 范围似乎是合适的。斯文关于计算的看法也是正确的。此外,最好不要有侧面依赖。如果您添加另一个具有不同名称的数据源,您将无法重用您的 ssjs 库。您可以将数据源作为参数移交,例如在渲染结果之前: setstatusDraftVisible(document1,'状态','草稿') 在这样的函数中,您检查字段(第二个参数)是否存在并且具有第三个参数的值,然后设置: viewScope.statusDraftVisible=true;//或错误

然后你已经渲染了=“#{JavaScript:viewscope.statusDraftVisible}”

当您的应用程序更加复杂并且需要进行大量此类检查时,您可能会考虑使用 viewScope“支持 bean”(也称为托管 bean)。这可能会减少渲染到 渲染=“#{beanName.statusDraftVisible}”

哪个更快。

关于xpages - SSJS 脚本库中的全局变量未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10077178/

相关文章:

search - FTSearch 和 NotesDocumentCollection

javascript - getComponent 方法与 Xpages 上的选项卡混淆

java - 在 XPage 中的新 Java 自定义控件中插入现有控件

java - 如何使用 XPAGES DesignerFacesServlet 显示泰语字母(以及另一个亚洲/阿拉伯字母)

javascript - 如何更新数组范围变量中的值?

javascript - 显示 XPage 中损坏的 Dojo 选项卡

view - XPage 分类 View 展开级别

xpages - 动态数据绑定(bind)?

SSJS xpages 中的 java 结构体数组

xpages - 只有 Xpages 编辑框中的数字?