如何将日、月或年添加到 Primefaces 日历输入
How to add days, months or years to a Primefaces calendar input
我在 .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>
这是它在网页中生成的内容
screenshot
第一个字段是 primefaces 日历。下一个是一个字段,您可以在其中输入一个数字,然后从您在下拉菜单中选择的内容(包括日、月、年),计算出的日期必须出现在我已禁用的最后一个字段中。因此,例如,如果我添加 01/06/2020,然后键入 2 并选择 "days(Ημέρες)" 选项,则在最后一个字段中必须出现日期 03/06/2020.
你能帮我解决这个问题吗?非常感谢。
您可以使用日历实现它。在selectOneMenu
中添加ajax:
<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");
}
我在 .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>
这是它在网页中生成的内容 screenshot
第一个字段是 primefaces 日历。下一个是一个字段,您可以在其中输入一个数字,然后从您在下拉菜单中选择的内容(包括日、月、年),计算出的日期必须出现在我已禁用的最后一个字段中。因此,例如,如果我添加 01/06/2020,然后键入 2 并选择 "days(Ημέρες)" 选项,则在最后一个字段中必须出现日期 03/06/2020.
你能帮我解决这个问题吗?非常感谢。
您可以使用日历实现它。在selectOneMenu
中添加ajax:
<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");
}