jsf - 如何将天、月或年添加到 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。
你能帮我解决这个问题吗?我真的很感激。
解决方案
您可以使用日历来实现它。在中添加 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");
}
推荐阅读
- .net - Telerik RadDataPager,如何在寻呼机中添加页面大小字段
- ios - 带有 Cordova 的 Quasar VueJS 应用程序在 iOS 模拟器上加载应用程序,只有空白页
- mysql - 如何在处理同一张表中的数据时更新数据库表中的某些行?
- python-3.x - ValueError: x 和 y 必须具有相同的第一维,但具有形状 (2140699,) 和 (4281398,)
- swift - 想要找到两个 3D 点或 Y 距离的相交角度(3D 位置)
- python - HyperLPR 只输出一个车牌号
- flutter - 文本字段高于键盘
- python - 使用 k-means 聚类进行颜色分类
- java - 项目转换为 JAVA 11 - NoSuchMethodError: MtomStreamWriter.getAttachmentMarshaller
- javascript - React js 更新 prop child,不改变组件的状态