Liferay <liferay-ui:input-date> control </liferay-ui:input-date>

时间:2011-11-30 08:06:29

标签: javascript jsp liferay

Hy all,

我是Liferay的新手,我从jsp移植到Liferay门户网站。

如果我有一个portlet jsp,其中有两个日期,如: 从日期 至今 并为每个日期字段使用两个不同的liferay-ui:input-date,如:

    ...
<%-- 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是&gt; = FromDate?

使用纯jsp,我可以通过javascript实现。

但是有了Liferay怎么能实现呢?

3 个答案:

答案 0 :(得分:2)

在我们的项目中,我使用手动验证我的Portlet类中的两个日期作为日期。我也搜索过但无法获得liferay提供的任何内容。通过javascript不知道Alloy UI是否提供了什么。

所以在我看来,liferay没有提供任何验证两个日期的功能(至少从现在开始),从一些没有这种验证的开箱即用的liferay portlet可以看出,例如公告-portlet with display-date和expiry-date。

答案 1 :(得分:1)

也许你需要像自定义验证器这样的东西。 在jsp中试试这个:

<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>

希望这会对你有所帮助。

感谢。

答案 2 :(得分:1)

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

<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>

也许这有助于某人。