注意事项,我有一份主要文件及其回复文件。 XPage-wise,主要doc和响应显示在同一个xp:view中,响应位于xp:table中,由xp:repeat
构成该表的每一行都有一个面板,其数据源当然与特定响应绑定。
到目前为止,非常简单,不是吗?
我非常希望确保主文档的编辑模式和响应在任何时候都是同步的。有点像:
我试图动态计算"动作"行中数据源的属性,但似乎不起作用。
我正在考虑以某种方式让回复听取事件"主要文档更改模式"并采取相应的行动,但我似乎无法绕过如何做到这一点。具体来说,那会是哪个事件?然后,如何让回复听取其他地方发生的事件?
任何提示都表示赞赏 THX
编辑:几天后回来,如果有人还在那里。
根据stwissel的建议,这里是代码:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex"
style="background-color:rgb(217,217,255)">
<xp:this.data>
<xp:dominoView
var="subdocsNotesView"
viewName="#{javascript:compositeData.subdocsNotesView}"
categoryFilter="#{javascript:compositeData.ctnrK}">
</xp:dominoView>
</xp:this.data>
<xp:table>
<xp:repeat
id="leRepeat"
value="#{subdocsNotesView}"
var="oneDoc">
<xp:tr>
<xp:panel id="rowPanel">
<xp:this.data>
<xp:dominoDocument
var="rowData"
formName="Person"
documentId="#{javascript:oneDoc.getDocument().getUniversalID()}"
action="editDocument">
</xp:dominoDocument>
</xp:this.data>
<xp:td>
<xp:inputText
id="Name"
value="#{rowData.Name}"
defaultValue="#{javascript:oneDoc.getDocument().getItemValueString('Name')}">
</xp:inputText>
</xp:td>
</xp:panel>
</xp:tr>
</xp:repeat>
</xp:table>
</xp:view>
答案 0 :(得分:1)
使用面板围绕您的重复控件。
根据主要文档的阅读或编辑模式计算面板的属性readonly
使用布尔viewScope变量&#34; editMode&#34;记住当前的模式。
<xp:table>
<xp:panel readonly="#{ not viewScope.editMode}">
<xp:repeat ...>
...
</xp:repeat>
</xp:panel>
</xp:table>
按钮中的更改模式:
<xp:button value="Editmode" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:changeDocumentMode mode="edit" var="mainDocument">
</xp:changeDocumentMode>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:
viewScope.editMode = true
}]]></xp:this.script>
</xp:executeScript>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:button value="Readmode" id="button2">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:changeDocumentMode mode="readOnly" var="mainDocument">
</xp:changeDocumentMode>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:
viewScope.editMode = false
}]]></xp:this.script>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>
即使重复的dominoDocument始终具有属性action="editDocument"
,当面板的属性readonly
为真时,重复文档仍处于读取模式。
如果面板的属性readonly
为false,则重复文档处于编辑模式
这样,主文档和重复文档的编辑模式就会同步。
答案 1 :(得分:0)
我建议使用实现模型视图控制器(MVC)的Managed Bean。视图范围中的Controller Bean包含当前的Main Doc模型,并协调对主doc及其响应的访问。主文档模型将包含一个响应文档模型数组,以便在模型中管理数据时在Controller上管理读取模式。
约翰·达尔斯加德(John Dalsgaard)在here找到了关于这一主题的精彩演讲。
我将此方法用于父/子文档以及包含相关或同步列表项的文档。
快乐的编码。