我有一个带有两个自定义控件的Xpage,其中包含与Xpage上的单个数据源相关联的可编辑字段。在Xpage上我使用了一个xe:对话框,其中包含一个用于保存数据源document1的按钮(使用SSJS)。尚未进行验证。我使用xe:dialogButtonBar调用xe:对话框(使用CSJS)打开正常,然后单击包含Action Save Document数据源的OK按钮。
diablogButtonBar onClick调用打开对话框。
XSP.openDialog("#{id:dialogSaveAsDraft}");
使用此配置,文档将被保存,但不会创建可编辑字段,也不会保存数据。 Xpage具有以下两个属性集:computeWithForm:onsave,action:editDocument但是也尝试了createDocument。
这是扭曲:如果我在xe:对话框中取出按钮并将其放在xe:对话框之外,按钮就可以工作,Xpage和所有可编辑字段都可以正常保存。
我错过了什么?我之前做过几乎完全相同的事情,但不是使用xe:dialogButtonBar我使用了一串按钮。我想使用xe:dialogButton Bar来组织UI。
有人可以解释为什么会发生这种情况吗?
答案 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级别再次在表单级别进行验证/翻译。