首页 > 解决方案 > 如何将天、月或年添加到 Primefaces 日历输入

问题描述

我在 .xhtml 文件中有以下代码

<!-- /row -->
    <div class="row" id="penaltyStartingDate" style="margin-top: 15px">
        <div class="span8">
            <div class="control-group">
                <label class="hcg-control-label span5">Ημερομηνία Έναρξης Ισχύος Ποινής</label>
                <div class="controls span7">
                    <p:calendar id="penaltyStartingDate" styleClass="hcg-full-width cursor-pointer" pattern="dd/MM/yyyy"
                                value="#{penaltiesView.penalty.penaltyStartingDate}" />
                    <i class="fa fa-calendar hcg-input-icon"></i>
                </div>
            </div>
        </div>
        <!-- /span -->
    </div>
    <!-- /row -->
    <div id="forfeitureDurationContainer" class="row" style="margin-top: 15px">
        <div class="span8">
            <div class="control-group">
                <label class="hcg-control-label span5">Χρόνος Στέρησης</label>
                <div class="controls span7">
                    <p:inputText id="ForfeitureDurationValue" styleClass="hcg-full-width" value="#{penaltiesView.penalty.forfeitureDurationValue}" disabled="#{!penaltiesView.canEdit()}" style="width:30%" required="false" requiredMessage="Ο χρόνος στέρησης είναι υποχρεωτικός." />
                    <p:selectOneMenu id="ForfeitureDurationType" value="#{penaltiesView.penalty.forfeitureDurationType}" disabled="#{!penaltiesView.canEdit()}" styleClass="margin-bottom-10" style="width:70%">
                        <f:selectItem itemLabel="Μήνες" itemValue="Months" />
                        <f:selectItem itemLabel="Ημέρες" itemValue="Days" />
                        <f:selectItem itemLabel="Χρόνια" itemValue="Years" />
                    </p:selectOneMenu>
                </div>
            </div>
        </div>
        <!-- /span -->
    </div>
    <!-- /row -->
    <div class="row" id="penaltyStopDate" style="margin-top: 15px">
        <div class="span8">
            <div class="control-group">
                <label class="hcg-control-label span5">Ημερομηνία Παύσης Ισχύος Ποινής</label>
                <div class="controls span7">
                    <p:calendar id="penaltyStopDate" styleClass="hcg-full-width cursor-pointer" pattern="dd/MM/yyyy" disabled="true"
                                value="#{penaltiesView.penalty.penaltyStopDate}" />
                    <i class="fa fa-calendar hcg-input-icon"></i>
                </div>
            </div>
        </div>
        <!-- /span -->
    </div>

这就是它在网页 截图中生成的内容

第一个字段是 primefaces 日历。下一个是您输入数字的字段,从您在下拉菜单中选择的内容(包括天、月、年)中,计算的日期必须出现在我禁用的最后一个字段中。例如,如果我添加 01/06/2020,然后输入 2 并选择“days(Ημέρες)”选项,则在最后的字段中必须出现日期 03/06/2020。

你能帮我解决这个问题吗?我真的很感激。

标签: jsfprimefaces

解决方案


您可以使用日历来实现它。在中添加 ajax selectOneMenu

<p:selectOneMenu id="ForfeitureDurationType" value="#{penaltiesView.penalty.forfeitureDurationType}" 
                 disabled="#{!penaltiesView.canEdit()}" styleClass="margin-bottom-10" style="width:70%">
                        <p:ajax event="change" listener="#{penaltiesView.calculatePenalty()}"
process="penaltyStartingDate,ForfeitureDurationValue,ForfeitureDurationType"/>
                        <f:selectItem itemLabel="Μήνες" itemValue="Months" />
                        <f:selectItem itemLabel="Ημέρες" itemValue="Days" />
                        <f:selectItem itemLabel="Χρόνια" itemValue="Years" />
                    </p:selectOneMenu>

然后在惩罚视图中:

public void calculatePenalty() {
    Calendar c = Calendar.getInstance();
    c.setTime(penalty.penaltyStartingDate);
    if (penalty.forfeitureDurationType.equals("Months") {
        c.add(Calendar.MONTH, penalty.forfeitureDurationValue);
        penalty.penaltyStopDate = c.getTime();
    } else if (penalty.forfeitureDurationType.equals("Days") {
        c.add(Calendar.DAY_OF_MONTH, penalty.forfeitureDurationValue);
        penalty.penaltyStopDate = c.getTime();
    } else {
        c.add(Calendar.YEAR, penalty.forfeitureDurationValue);
        penalty.penaltyStopDate = c.getTime();
    }
    PrimeFaces.current().ajax().update("penaltyStopDate");
}

在此处输入图像描述


推荐阅读