【问题标题】:XPages Repeat control, compute visibleXPages 重复控件,计算可见
【发布时间】:2013-06-03 09:33:55
【问题描述】:

我有全局上下文文档 currentDoc 并使用 currentDoc 的响应重复控制。
在重复控制中,我有 2 个字段:
1) 组合框
2) Editbox,由 ComboBox 计算 Visible:

var temp = respDoc.getItemValueString( "Combobox1");
return temp == "a";

Onchange 事件 ComboBox 我更新重复控件。
我有按钮“添加响应”(创建/保存响应和更新重复控制)
这是工作。但是..如果我创建响应并保存它,计算可见的字段重置为“”并且不保存。如果我将文本重新输入到 Editbox 并重新保存,那么好的。仅在重新保存后有效。没有错误。 可能你知道,什么问题?

源代码

<xp:this.data>
        <xp:dominoDocument var="curDoc" formName="test"></xp:dominoDocument>
    </xp:this.data>

    <xp:repeat id="repeat1" rows="30" var="respDoc"
        repeatControls="false"
        indexVar="respDocIndex" value="#{javascript:return curDoc.getDocument().getResponses();}">
        <xp:panel id="panel1">
            <xp:table>
                <xp:tr>
                    <xp:td style="width:150.0px">
                        <xp:comboBox id="comboBox1" style="width:95%"
                            value="#{respDoc.combobox}" required="false">
                            <xp:selectItem
                                itemLabel="Email" itemValue="a">
                            </xp:selectItem>
                            <xp:selectItem itemLabel="UserName"
                                itemValue="b">
                            </xp:selectItem>

                            <xp:eventHandler event="onchange"
                                submit="true" refreshMode="partial" refreshId="repeat1">
                            </xp:eventHandler>
                        </xp:comboBox>
                    </xp:td>
                    <xp:td>
                    <xp:inputText id="inputText2"
                        value="#{respDoc.editbox}" maxlength="20">
                        <xp:this.rendered><![CDATA[#{javascript://return true    <---- if uncomment it, then all work
var temp = respDoc.getItemValueString( "combobox");
return temp == "b";}]]></xp:this.rendered>
                    </xp:inputText></xp:td>
                    <xp:td>
                        <xp:button value="Save" id="button4">
                            <xp:eventHandler event="onclick"
                                submit="true" refreshMode="partial" refreshId="repeat1">
                                <xp:this.action><![CDATA[#{javascript:respDoc.save();}]]></xp:this.action>
                            </xp:eventHandler></xp:button>
                    </xp:td>
                </xp:tr>
            </xp:table>
        </xp:panel>
    </xp:repeat>
    <xp:button value="Add Response" id="button2">
        <xp:eventHandler event="onclick" submit="true"
            refreshMode="partial" refreshId="repeat1">

            <xp:this.action><![CDATA[#{javascript:if(curDoc.isNewNote())
    curDoc.save();
var doc:NotesDocument = database.createDocument();
doc.replaceItemValue("Form", "test");
doc.makeResponse(curDoc.getDocument());
doc.save();}]]></xp:this.action>

        </xp:eventHandler>
    </xp:button>

【问题讨论】:

  • 发布更多源代码。很可能是数据源的定义方式存在问题,但仅从行为描述很难确定。

标签: repeater xpages


【解决方案1】:

你的方法有很多问题:

  1. 在更改复选框时启动服务器往返,这是表单的意外行为
  2. 未保存的文档不能有响应,因此不应显示重复
  3. 当您创建一个新文档时,您没有为“组合框”项分配任何值,因此您的测试 temp =="b" 失败。
  4. 当没有渲染时,没有值被发送回服务器,这可能不是你想要的

我会使用style="display : none" to hide the field on the client side and have the event only run on the client. also add a value to your combobox when creating a new document:

 var doc:NotesDocument = database.createDocument();
 doc.replaceItemValue("Form", "test");
 doc.makeResponse(curDoc.getDocument());
 doc.replaceItemValue("Combobox1","a");
 doc.save();
 doc.recyle();

希望有帮助

【讨论】:

  • 也许 IBM 应该修改属性并允许我们将“渲染”和“可见”的公式作为对象的一部分分开,而不是要求 HTML 样式来隐藏东西?
  • Visible is a) HTML 标准中的 HTML 属性,b) 可以在 style 属性中计算。那么你缺少什么?它,你是对的,最初令人困惑的是渲染的属性在 DDE UI 中被标记为“可见”
  • @stwissel 没错。它被标记为“可见”,但在源代码中更正确地标识为“渲染”。我认为他们真的应该使用“可见”来表示它是否显示,“渲染”来表示它是否包含在 XPage 中。也就是说,拆分当前混乱的术语。否则,他们应该将 DDE UI 中的属性名称更改为标记为“渲染”而不是“可见”。
  • 如果初学者不知道渲染是什么 ;-)。一旦你达到你所做的水平,你很可能只使用所有属性面板或源视图,在那里它被正确地称为渲染。非常有意识地选择漂亮面板中的标签来降低起始障碍(渲染对于 Domino 开发人员来说是新的)。如果这对您来说是个问题,请坚持使用所有属性面板
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多