Liferayконтроль - PullRequest
       5

Liferayконтроль

6 голосов
/ 30 ноября 2011

Hy all,

Я новичок в Liferay и портирую с jsp на портал Liferay.

Если у меня есть портлет 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> = FromDate?

С чистым jsp я могу сделать это через javascript.

Но как Liferay может этого достичь?

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

В нашем проекте я использовал ручную валидацию для двух дат в моем классе портлетов для дат. Я также искал, но не мог получить ничего, что обеспечивает LifeRay. Через javascript не знаю, предоставляет ли Alloy UI что-то.

Так что, по моему скромному мнению, liferay не предоставляет никаких функций для проверки двух дат (по крайней мере, на данный момент), как это видно из некоторых готовых портлетов liferay, которые не имеют такой проверки, как, например, Объявления -портлет с отображением даты и даты истечения срока действия.

1 голос
/ 17 мая 2016

Мой ответ основан на AGi s ответе.Если вы используете, например, настройки немецкого языка, 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>

Возможно, это кому-то поможет.

1 голос
/ 21 января 2015

Может быть, вам нужно что-то вроде пользовательского валидатора. Попробуйте это в вашем 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>

Надеюсь, это поможет вам.

Спасибо.

...