如果保存按钮位于xe:对话框中,XPages表单将不保存字段值

时间:2014-12-11 16:32:09

标签: xpages xpages-ssjs xpages-extlib

我有一个带有两个自定义控件的Xpage,其中包含与Xpage上的单个数据源相关联的可编辑字段。在Xpage上我使用了一个xe:对话框,其中包含一个用于保存数据源document1的按钮(使用SSJS)。尚未进行验证。我使用xe:dialogBu​​ttonBar调用xe:对话框(使用CSJS)打开正常,然后单击包含Action Save Document数据源的OK按钮。

diablogBu​​ttonBar onClick调用打开对话框。

XSP.openDialog("#{id:dialogSaveAsDraft}");

使用此配置,文档将被保存,但不会创建可编辑字段,也不会保存数据。 Xpage具有以下两个属性集:computeWithForm:onsave,action:editDocument但是也尝试了createDocument。

这是扭曲:如果我在xe:对话框中取出按钮并将其放在xe:对话框之外,按钮就可以工作,Xpage和所有可编辑字段都可以正常保存。

我错过了什么?我之前做过几乎完全相同的事情,但不是使用xe:dialogBu​​ttonBar我使用了一串按钮。我想使用xe:dialogBu​​tton Bar来组织UI。

有人可以解释为什么会发生这种情况吗?

2 个答案:

答案 0 :(得分:2)

问题在于表单提交。启动对话框时,不会提交页面其他部分的可编辑字段(部分刷新时会启动对话框)。因此,后端组件树不知道客户端的字段更新。

您可以从SSJS打开对话框(以便提交页面)或使用onComplete脚本创建“noupdate”提交以启动对话框。

<xp:link
    escape="true"
    text="Open Dialog with SSJS"
    id="link1">
    <xp:eventHandler
        event="onclick"
        submit="true"
        refreshMode="norefresh"
        action="#{javascript:getComponent('dialogSaveAsDraft').show()}">
    </xp:eventHandler>
</xp:link>
<xp:link
    escape="true"
    text="Open Dialog with onComplete"
    id="link2">
    <xp:eventHandler
        event="onclick"
        submit="true"
        refreshMode="norefresh"
        onComplete="XSP.openDialog('#{id:dialogSaveAsDraft}');">
    </xp:eventHandler>
</xp:link>

答案 1 :(得分:0)

如果使用ComputeWithForm,则必须具有DisplayErrors控件。这就是出现验证错误消息的地方。你有吗?如果不是,您可能会从表单上的公式获得验证错误,他们没有地方显示错误消息。顺便说一句,使用ComputeWithForm并不是一件好事。您应该直接在XPage上重复验证逻辑。否则,你会发生太多事情,在XPage级别再次在表单级别进行验证/翻译。