XPages重复控制,计算可见

时间:2013-06-03 09:33:56

标签: repeater xpages

我有全局上下文文档currentDoc并且使用currentDoc的响应重复控制 在重复控制中,我有2个字段:
1)ComboBox
2)编辑框,由ComboBox计算可见:

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

Onchange事件ComboBox我更新重复控制。
我有按钮“添加响应”(创建/保存响应和更新重复控制)
这是工作。但是..如果我创建响应并保存此字段,计算的Visible重置为“”并且不保存。如果我重新输入文本到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>

1 个答案:

答案 0 :(得分:2)

您的方法有很多问题:

  1. 在更改复选框时启动服务器往返,这是表单的意外行为
  2. 尚未保存的文档无法响应,因此您不应显示重复
  3. 当您创建新文档时,不会为“combobox”项指定任何值,因此您的测试temp =="b"会失败。
  4. 如果没有呈现,则不会将任何值发送回服务器,这可能不是您想要的
  5. 我会使用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();
    

    希望有所帮助