Xpages Teamstudio未插入:添加更多表行而不进行部分刷新
我正在使用Teamstudio Unlocked尝试扩展一个表行,其中inputExt绑定到一个文档 此表的功能是让用户写下观察结果,然后描述观察结果 在此之后,用户应该能够按下一个按钮,并获得另一行,以便他可以添加另一个观察 我无法部分刷新整个表,因为这会导致InputExt重新加载绑定到它们的值 我无法部分刷新新行并使用服务器端脚本更改其styleclass,因为ID不会从设计器继承。 这意味着在设计器中:Xpages Teamstudio未插入:添加更多表行而不进行部分刷新,xpages,teamstudio-unplugged,Xpages,Teamstudio Unplugged,我正在使用Teamstudio Unlocked尝试扩展一个表行,其中inputExt绑定到一个文档 此表的功能是让用户写下观察结果,然后描述观察结果 在此之后,用户应该能够按下一个按钮,并获得另一行,以便他可以添加另一个观察 我无法部分刷新整个表,因为这会导致InputExt重新加载绑定到它们的值 我无法部分刷新新行并使用服务器端脚本更改其styleclass,因为ID不会从设计器继承。 这意味着在设计器中:成为pc模拟器中的: 所以我不能用计算样式类和部分刷新来解决这个问题。因此,我现在已经
成为pc模拟器中的:
所以我不能用计算样式类和部分刷新来解决这个问题。因此,我现在已经建立了一个按钮,包括下面,但它只改变工作两次。在此之后,onclick字符串永远不会更改
与您的另一个问题一样,我也倾向于在客户端执行此操作,而不是尝试进行部分刷新。只需使用jQuery将行添加到表中,然后在保存文档时将每行的值存储到隐藏的列表字段中
同样,对于您想要使用的ID,不要依赖服务器生成的ID,而是添加您自己的属性,并使用这些属性选择项目。这可以通过使用标准(-ish)XPages技术来完成,这对于任何不熟悉JQuery的人来说可能更容易。 我从不建议使用表格进行布局,使用
和或
标记并使用CSS。然而,为了回答这个特定的问题,我使用了一张桌子(现在从肥皂盒上爬下来)
所以我假设每一行中的数据都在同一个文档中。如果是这样,并且用户一次只写一个观察,为什么不使用完全刷新?所有的事情都是在不插电源的情况下在客户端完成的(即使是服务器部件——如果有意义的话),所以速度很快。此方法显示现有观察结果(如果适用),并允许用户一次输入多行:
在表单上添加一个隐藏字段-NoOfObservations-这可以是一个文本字段,并将用作XPage中的索引
将XPage上的数据源添加到表单
创建beforePageLoad事件以根据现有文档或新文档设置索引:
<xp:this.beforePageLoad><![CDATA[#{javascript:
var ObservationCount = 0;
if(!document1.isNewNote()){
ObservationCount = document1.getItemValue("NoOfObservations")[0];
}
sessionScope.put("observations", ObservationCount);
}]]>
</xp:this.beforePageLoad>
使用现有行创建表-使用xp:repeat控件和sessionScope中的索引生成行-为新条目添加两行新行:
<table>
<xp:repeat id="repeat1" rows="30" var="rowData"
indexVar="dataRows">
<xp:this.value><![CDATA[#{javascript:sessionScope.get("observations");}]]></xp:this.value>
<tr>
<td>
<xp:label value="Observation" id="label1"
style="color:rgb(255,255,255)">
</xp:label>
</td>
<td>
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{javascript:return document1.getItemValueString("ObservationTitle" + dataRows);}]]></xp:this.value>
</xp:text>
</td>
</tr>
<tr>
<td>
<xp:label value="Details" id="label2"
style="color:rgb(255,255,255)">
</xp:label>
</td>
<td>
<xp:text escape="true" id="computedField2">
<xp:this.value><![CDATA[#{javascript:return document1.getItemValueString("ObservationDesc" + dataRows);}]]></xp:this.value>
</xp:text>
</td>
</tr>
</xp:repeat>
<tr>
<td>
<xp:label value="New Observation"
id="newObservationTitle" style="color:rgb(255,255,255)">
</xp:label>
</td>
<td>
<xp:inputText id="inputText1"></xp:inputText>
</td>
</tr>
<tr>
<td>
<xp:label value="New Description"
id="newObservationDesc" style="color:rgb(255,255,255)">
</xp:label>
</td>
<td>
<xp:inputTextarea id="inputTextarea1"></xp:inputTextarea>
</td>
</tr>
</table>
在onClick事件中使用带有以下SSJ的xp:按钮:
<xp:button value="Save" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:
var newObservation = parseInt(sessionScope.get("observations")) +1;
document1.replaceItemValue("ObservationTitle" + newObservation, getComponent("inputText1").getValue());
document1.replaceItemValue("ObservationDesc" + newObservation, getComponent("inputTextarea1").getValue());
document1.replaceItemValue("NoOfObservations", newObservation);
document1.save();}]]></xp:this.script>
</xp:executeScript>
<xp:openPage name="/UnpMain.xsp"></xp:openPage>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>