xpages bootstrap日期选择器错误保存值

时间:2014-10-01 11:16:13

标签: xpages xpages-ssjs

我使用了Bootstrap4XPages datepicker工具。

但我有这个问题 在后端,日期字段始终在1月份设置 如果您在选择日历选择器后点击***设置为阅读模式***,您也可以尝试在线演示...在阅读模式下,您会看到错误的值。

例如,如果我选择12-02-2015(2015年2月12日) 节约价值总是...... 2015年1月12日......每个月都设定为1月......

你有什么建议吗?

Bootstrap4XPages更新的源代码控制源代码

    <?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core">

    <!--
        note: this date picker depends on a number of files: - bootstrap 3+ - bootstrap-datepicker
        (https://github.com/eternicode/bootstrap-datepicker) - jquery
    -->

    <!-- js & css for plugin -->
    <xp:this.resources>
        <xp:script
            src="/eternicode-datepicker-1.3/js/bootstrap-datepicker.js"
            clientSide="true">
        </xp:script>
        <xp:styleSheet
            href="/eternicode-datepicker-1.3/css/datepicker3.css">
        </xp:styleSheet>
    </xp:this.resources>

    <xp:text
        escape="true"
        id="computedField1"
        value="#{compositeData.fieldDataSource[compositeData.fieldName]}"
        rendered="#{javascript:!compositeData.fieldDataSource.isEditable()}">
        <xp:this.converter>
            <xp:convertDateTime
                type="date"
                dateStyle="full"></xp:convertDateTime>
        </xp:this.converter>
    </xp:text>

    <xp:div
        styleClass="input-group date"
        id="dateC"
        rendered="#{javascript:compositeData.fieldDataSource.isEditable()}">

        <xp:inputText
            styleClass="form-control"
            size="16"
            id="inputDatum"
            value="#{compositeData.fieldDataSource[compositeData.fieldName]}">
            <xp:this.attrs>
                <xp:attr
                    name="placeholder"
                    value="#{javascript:compositeData.dateFormat.toLowerCase()}">
                </xp:attr>
            </xp:this.attrs>
            <xp:this.converter>
                <xp:convertDateTime
                    type="date"
                    pattern="${compositeData.dateFormat}">
                </xp:convertDateTime>
            </xp:this.converter>
        </xp:inputText>
        <span
            class="input-group-addon">
            <i
                class="glyphicon glyphicon-calendar"></i>
        </span>
    </xp:div>

    <xp:scriptBlock
        id="scriptBlock2">
        <xp:this.value><![CDATA[
        var options = {};

        if ( null != "#{compositeData.options}" ) {
            options = #{javascript:toJson(compositeData.options)};
        }

        options.format = "#{compositeData.dateFormat}";

$(function(){
    //initialize date picker
    x$('#{id:dateC}').datepicker(options);

});
]]></xp:this.value>
    </xp:scriptBlock>

</xp:view>

这是XPages的代码

    <xc:ccBS_DatePicker
                                dateFormat="dd-mm-yyyy"
                                fieldDataSource="#{document1}"
                                fieldName="data">
                                <xc:this.options><![CDATA[#{javascript:return {
    daysOfWeekDisabled: "0,6",
    autoclose: true,
    todayBtn: "linked",
    todayHighlight: true
}}]]></xc:this.options>
                            </xc:ccBS_DatePicker>

1 个答案:

答案 0 :(得分:1)

问题是由Bootstrap4XPages演示数据库中的错误引起的:嵌入日期选择器的自定义控件上转换器的日期格式指定为dd-mm-yyyy。应该是dd-MM-yyyy(使用大写字母M):与Java SimpleDateFormat类使用的标准相同。

演示数据库中使用的日期选择器是this,通过eternicode。在配置时使用小写的m指定日期格式。

我已更新演示数据库以处理此问题:在自定义控件中,您必须使用Java语法指定要使用的格式(例如&#39; dd-MM-yyyy&#39;) 。在我将选项传递给日期选择器的自定义控件中,我将案例修改为正确的格式。