【发布时间】:2015-02-14 21:05:56
【问题描述】:
对于我的 XPage,我开发了一些托管 Bean 来保存数据。页面本身包含一个Repeat控件,现在是这样的:
<xp:panel styleClass="form">
<xp:this.dataContexts>
<xp:dataContext value="#{javascript:PageData.getForm(compositeData.formName, compositeData.dataSource);}"
var="myFormData">
</xp:dataContext>
<xp:dataContext var="myFields">
<xp:this.value><![CDATA[#{javascript:return myFormData.getFieldsAsJSON();}]]></xp:this.value>
</xp:dataContext>
</xp:this.dataContexts>
<xp:table style="width:100%" cellspacing="1" cellpadding="0">
<xp:repeat var="thisfield" rows="#{javascript:compositeData.rows}" disableTheme="true" repeatControls="true"
disableOutputTag="true" value="#{myFields}">
PageData 对象是一个 bean,它包含有关表单及其字段的信息。下拉字段包含选项,但它们可以动态创建。发生这种情况时,由于部分刷新,表单会重新显示,但是......重复“值”本身(myFields)不会重新加载到重复中,因此新的下拉选项不可用。
如何让 XPages 重新加载“值”属性?
更新 根据要求提供更多信息...
来自 FormData bean:
public Object getFieldsAsJSON() {
ArrayObject list = null;
try {
System.err.print("FormData: getFieldsAsJSON");
list = new ArrayObject();
for (Entry<String, FieldData> e : fields.entrySet()) {
FieldData field = e.getValue();
list.addArrayValue(field.getJSON());
}
} catch (Exception e) {
}
return list;
}
来自 FieldData bean:
public ObjectObject getJSON() throws InterpretException {
ObjectObject json = new ObjectObject();
json.put("name", FBSUtility.wrap(name));
json.put("label", FBSUtility.wrap(field.getLabel()));
json.put("options", FBSUtility.wrap(values));
return json;
}
恕我直言,问题不在于这些 bean。这更像是一个 XPages 问题,因为出于某种奇怪的原因,该结构仅被获取一次,并且再也不会被获取。显然,XPages 认为 json 是静态的,但事实并非如此。
在 bean 时代之前,我在 SSJS 中拥有一切,动态创建 JavaScript 对象,并且每次都重新加载它。为什么不用了,有什么区别?有什么东西可以告诉 XPages 重复值是“陈旧的”并且应该重新读取吗?
【问题讨论】:
-
我现在确实有一个工作区:对象没有被重新评估,上例中的这个字段也没有改变,但是...... myFields[indexVar].options 是!
标签: xpages repeater managed-bean