【问题标题】:validation Xpages Date Time Component验证 Xpages 日期时间组件
【发布时间】:2017-08-02 20:43:15
【问题描述】:

我的 Xpages 中有两个日期时间组件,我需要在提交之前比较两个日期,以便我使用表达式验证功能:

 <xp:inputText value="#{document1.FUP_creation}"
                    id="FUP_creation" required="true">
                    <xp:this.validators>
                        <xp:validateRequired
                            message="Date is required">
                        </xp:validateRequired>
                    </xp:this.validators>
                    <xp:dateTimeHelper id="dateTimeHelper3">
                    </xp:dateTimeHelper>

                    <xp:this.converter>
                        <xp:convertDateTime type="date"
                            dateStyle="short">
                        </xp:convertDateTime>
                    </xp:this.converter>
                </xp:inputText>

                <xp:inputText value="#{document1.FUP_expireDate}"
                id="FUP_expiredDate" required="true">
                <xp:this.validators>
                    <xp:validateRequired
                        message="Date is required">
                    </xp:validateRequired>
                    <xp:validateExpression
                        message="The expired date must be greater than creation date">

<xp:this.expression><![CDATA[#{javascript://_dump("creation date")
_dump(this.getValue())
_dump(this.getSubmittedValue())
var exp_date:java.util.Date=this.getValue();
var fup_creation:java.util.Date=getComponent("FUP_creation").getValue();

if (exp_date.compareTo(fup_creation)>=0) return true
else return false}]]></xp:this.expression>
                        </xp:validateExpression>


                    </xp:this.validators>
                    <xp:dateTimeHelper></xp:dateTimeHelper>
                    <xp:this.converter>
                        <xp:convertDateTime type="date"
                            dateStyle="short">
                        </xp:convertDateTime>
                    </xp:this.converter>
                </xp:inputText>

正确的值始终是 getSubmittedValue()..但返回到 java.lang.String 模式而不是 java.util.Date。

现在可以使用 java.text.SimpleDateFormat 将我提交的值转换为 java.util.Date...但这是一个正确的解决方案?

【问题讨论】:

    标签: xpages xpages-ssjs


    【解决方案1】:

    您可以使用验证器validateDateTimeRange 并将minimum 值设置为您的创建日期字段:

    <xp:validateDateTimeRange
        message="The expired date must be greater than creation date"
        minimum="#{javascript:getComponent('FUP_creation').getValue()}">
    </xp:validateDateTimeRange>
    

    这是一个不错的简短解决方案,但只有在两个日期也可以相等时才有用。

    validateExpression 的解决方案是这样工作的:

    <xp:validateExpression
        message="The expired date must be greater than creation date">
        <xp:this.expression><![CDATA[#{javascript:
            var df:java.text.DateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd");
            var fup_creation = df.format(getComponent('FUP_creation').getValue());
            var exp_date = this.getSubmittedValue();
            if(exp_date > fup_creation){ 
                return true;
            }else{ 
                return false;}}]]>
        </xp:this.expression>
    </xp:validateExpression>
    

    this.getSubmittedValue() 返回格式为“yyyy-MM-dd”的字符串。这允许我们将其与格式相同的字符串进行比较,因为比较操作给出的结果与比较日期格式的日期相同。

    确保您的页面上有&lt;xp:messages&lt;xp:message 标记,以便您可以看到消息。

    【讨论】:

    • Tnx 你...我想那是需要使用 java.text.SimpleDateFormat
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 2021-01-17
    • 2023-04-05
    相关资源
    最近更新 更多