使用datepicker创建多值日期字段

时间:2015-08-19 23:12:50

标签: datepicker xpages multivalue

我试图使用日期选择器创建一个MV日期字段,我能够得到的最接近的是使用日期选择器在viewScope中存储日期然后有一个按钮来添加日期到现有的MV Date字段。它有效(但有点),但似乎是一种非常尴尬的方式。做了一些搜索,找不到更好的东西。我存储值的字段必须是可编辑的,以便在需要时可以删除值,但根本不能平滑。 有什么想法吗?

2015年8月21日编辑 参与保罗的答案和解决方案的一部分,但我在数据输入方面遇到了一些问题。请参阅下面的代码 - 因为它工作正常并在viewScope.vsDates中存储日期列表如果删除//并添加到行viewScope.vsNames = tArray; //注释掉这一行,并在tArray.push(addDate)行运行相同的进程,并显示错误消息"添加日期错误调用方法' push(java.util.Date)& #39;在类型'日期[JavaScript对象]'"的对象上 因此,一旦我从WFSMainDoc.getValue(" ExpPayDate")中检索了值,数据类型已经改变但不确定如何绕过该部分。

<xp:panel id="panelAddDates">
        Additional Display Dates :
        <xp:table>
            <xp:tr>
                <xp:td valign="top">

                    <xp:inputText id="AddDate" value="#{viewScope.vsAddDate}">
                        <xp:dateTimeHelper id="dateTimeHelper3"></xp:dateTimeHelper>
                        <xp:this.converter>
                            <xp:convertDateTime type="date" dateStyle="medium">
                            </xp:convertDateTime>
                        </xp:this.converter>
                    </xp:inputText>
                </xp:td>
                <xp:td valign="top">
                    <xp:button value="Add to list" id="button2">
                        <xp:eventHandler event="onclick" submit="true"
                            refreshMode="partial" refreshId="panelAddDates">
                            <xp:this.action><![CDATA[#{javascript:try{
print("Start Transfer date");
var addDate:NotesDateTime = viewScope.vsAddDate;
print("Got addDate " + addDate);
//var expPayDate = WFSMainDoc.getValue("ExpPayDate");
var expPayDate = viewScope.vsDates;
    if (addDate != null){
        if (expPayDate == null || expPayDate == ""){
            print("expPayDate is null")
            var tArray:Array = new Array;
            tArray.push(addDate);
            //WFSMainDoc.setValue("ExpPayDate" , tArray)
            viewScope.vsDates = tArray
            print("ExpPayDate in WFSMainDoc = " + WFSMainDoc.getValue("ExpPayDate"))
            print("ExpPayDate in viewscope = " + viewScope.vsDates)
        }else{
            var tArray:Array = new Array;
            //tArray = WFSMainDoc.getValue("ExpPayDate");
            tArray = viewScope.vsDates;
            print("Got tArray = " + tArray.toString());
            tArray.push(addDate);
            //WFSMainDoc.setValue("ExpPayDate" , tArray);
            viewScope.vsNames = tArray; //comment out this line
            //print("ExpPayDate in WFSMainDoc = " + WFSMainDoc.getValue("ExpPayDate"));
            print("ExpPayDate in viewScope = " + viewScope.vsDates);
        }
        viewScope.remove("vsAddDate")
        print("Done")
    }
}catch(e){
    print("Error in Add Date " + e.toString())
}}]]></xp:this.action>
                        </xp:eventHandler>
                    </xp:button>
                </xp:td>
                <xp:td valign="top">

                <xe:djextListTextBox id="djextListTextBox1"
                    value="#{WFSMainDoc.ExpPayDate}" multipleSeparator=";">
                </xe:djextListTextBox>
                </xp:td>
            </xp:tr>
        </xp:table>
        </xp:panel><!-- panelAddDates -->

3 个答案:

答案 0 :(得分:0)

绑定到具有onBlur事件的requestScope变量的普通DatePicker如何将字段添加到数据源的字段,刷新相关组件(参见下一句)?然后将数据源的字段绑定到Dojo列表文本框(记住将其设置为多值),以便允许用户删除值,但避免必须处理多个值的验证?

它应该提供一个非常优雅的解决方案,唯一可感知的问题是它使得更改单个日期值变得更加困难。

答案 1 :(得分:0)

您可以将字段的值拆分为多个临时单值字段吗?

答案 2 :(得分:0)

经过比我应该花费的时间更多的时间之后,我找到了一个非常可行的解决方案。我有一个与requestScope.addDate绑定的日期选择器,然后是一个添加按钮,它将viewScope.vsDates中的选定值存储为日期数组。此外,添加按钮将后端数据设置为viewScope.vsDates。然后添加一个由viewScope.vsDates填充的重复控件,重复控件在viewScope中显示每个实例的按钮和日期值。重复按钮仅显示文档是否可编辑,按钮知道要删除的项目的位置,以便将其从viewScope中删除并重置后端字段。见下图。

enter image description here