首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Liferay <liferay ui:input-date>控件

Liferay <liferay ui:input-date>控件
EN

Stack Overflow用户
提问于 2011-11-30 16:06:29
回答 3查看 8.8K关注 0票数 6

大家好,

我是Liferay的新手,我做了一些从jsp到Liferay门户的移植。

如果我有一个portlet jsp,其中包含两个日期,例如: FromDate ToDate,并使用两个不同liferay ui:input- date,每个日期字段一个,如下:

代码语言:javascript
复制
    ...
<%-- From DATE --%>
<tr>
    <td>
        From date :
    </td>
    <td>
        <liferay-ui:input-date
            dayParam='<%= "strDataRegDa" + "Day" %>'
            dayValue="<%=Integer.parseInt(strDataRegDa.substring(0,2))%>"
            dayNullable="<%= false %>"
            monthParam='<%= "strDataRegDa" + "Month" %>'
            monthValue="<%=(Integer.parseInt(strDataRegDa.substring(3,5))) -1 %>"
            monthNullable="<%= false %>"
            yearParam='<%= "strDataRegDa" + "Year" %>'
            yearValue="<%=Integer.parseInt(strDataRegDa.substring(6))%>"
            yearNullable="<%= false %>"
            yearRangeStart="<%= 1980 %>"
            yearRangeEnd="<%= 2050 %>"
            firstDayOfWeek="<%= Calendar.MONDAY - 1 %>"
            imageInputId='<%= "ceremonyDate"%>'
            disabled="false" >
        </liferay-ui:input-date>
    </td>
</tr>

<%-- To DATE --%>
<tr>
    <td>
        To date :
    </td>
    <td>
        <liferay-ui:input-date
            dayParam='<%= "strDataRegA" + "Day" %>'
            dayValue="<%=Integer.parseInt(strDataRegA.substring(0,2))%>"
            dayNullable="<%= false %>"
            monthParam='<%= "strDataRegDa" + "Month" %>'
            monthValue="<%=(Integer.parseInt(strDataRegA.substring(3,5))) -1 %>"
            monthNullable="<%= false %>"
            yearParam='<%= "strDataRegDa" + "Year" %>'
            yearValue="<%=Integer.parseInt(strDataRegA.substring(6))%>"
            yearNullable="<%= false %>"
            yearRangeStart="<%= 1980 %>"
            yearRangeEnd="<%= 2050 %>"
            firstDayOfWeek="<%= Calendar.MONDAY - 1 %>"
            imageInputId='<%= "ceremonyDate"%>'
            disabled="false" >
        </liferay-ui:input-date>
    </td>
</tr>
....

有没有办法控制ToDare is >= FromDate?

使用纯jsp,我可以通过javascript做到这一点。

但是使用Liferay如何做到这一点呢?

EN

回答 3

Stack Overflow用户

发布于 2012-03-22 21:56:16

在我们的项目中,我在我的Portlet类中对日期的两个日期进行了手动验证。我也搜索过,但找不到liferay提供的任何东西。通过javascript,我不知道合金UI是否提供了一些东西。

因此,在我的拙见中,liferay没有提供任何验证两个日期的功能(至少到目前为止),这可以从一些开箱即用的liferay portlet中看出,这些portlet没有这种验证,例如带有display-date和expiry date的公告-portlet。

票数 2
EN

Stack Overflow用户

发布于 2015-01-21 17:20:41

也许你需要像定制验证器这样的东西。在您的jsp中尝试以下代码:

代码语言:javascript
复制
<liferay-ui:input-date name="fromDate"></liferay-ui:input-date>
<liferay-ui:input-date name="toDate">
    <aui:validator name="custom" errorMessage="your custom validation msg">
    function(val, fieldNode, ruleValue) 
    {
        // No error when toDate is blank
        if(val == ""){
            return true;
        }
        var fromDate;
        var toDate;
        var result=false;

        var fromDateObj = document.getElementById("<portlet:namespace />fromDate");
        if(fromDateObj) {
            fromDate = new Date(fromDateObj.value);
        }else{
            result = false;
        }

        toDate = new Date(val);

        if(fromDate && toDate){
            result = (toDate.getTime() > fromDate.getTime());
        }else{
            result = false;
        }

        return result;
    } 
    </aui:validator>
</liferay-ui:input-date>

希望这对你有帮助。

谢谢。

票数 1
EN

Stack Overflow用户

发布于 2016-05-17 22:16:06

我的回答是基于AGi的回答。例如,如果使用德语设置,liferay-ui:input-date会将其值格式化为DD/MM/YYYY而不是MM/DD/YYYY (我仍然不知道如何更改input-date的格式..)。这意味着fromDate = new Date(fromDateObj.value)不能工作。因此,我做了一个变通办法,直接访问日、月和年,并手动比较这些值。此解决方案的一个优点可能是您独立于input-date使用的格式:

代码语言:javascript
复制
<liferay-ui:input-date
        name="startDate"
        yearParam="startDateYear"
        monthParam="startDateMonth"
        dayParam="startDateDay"
/>
<liferay-ui:input-date
        name="endDate"
        yearParam="endDateYear"
        monthParam="endDateMonth"
        dayParam="endDateDay"
>
    <aui:validator name="endDateAfterStartDate" errorMessage="some-error-message">
        function(value, fieldNode, ruleValue) {
            var result = false;

            var startDateYear = parseInt(document.getElementById("<portlet:namespace />startDateYear").value);
            var startDateMonth = parseInt(document.getElementById("<portlet:namespace />startDateMonth").value);
            var startDateDay = parseInt(document.getElementById("<portlet:namespace />startDateDay").value);
            var endDateYear = parseInt(document.getElementById("<portlet:namespace />endDateYear").value);
            var endDateMonth = parseInt(document.getElementById("<portlet:namespace />endDateMonth").value);
            var endDateDay = parseInt(document.getElementById("<portlet:namespace />endDateDay").value);

            if (endDateYear > startDateYear) {
                result = true;
            } else if (endDateYear == startDateYear) {
                if (endDateMonth > startDateMonth) {
                    result = true;
                } else if (endDateMonth == startDateMonth) {
                    if (endDateDay > startDateDay) {
                        result = true;
                    }
                }
            }

            return result;
        }
    </aui:validator>
</liferay-ui:input-date>

也许这对某些人有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8322829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档