我在主题中提到了一个问题。我有
<h:selectOneMenu class="time" id="time" value="#{auctionBean.expDate}">
<f:convertDateTime pattern="dd/MM/yyyy HH:mm:ss"/>
<f:selectItem itemValue="11/11/1111 11:11:11" itemLabel="1 day" />
<f:selectItem itemValue="#{auctionBean.calculateExpDate(4)}" itemLabel="4 days" />
<f:selectItem itemValue="#{auctionBean.calculateExpDate(7)}" itemLabel="7 days" />
<f:selectItem itemValue="#{auctionBean.calculateExpDate(14)}" itemLabel="14 days" />
</h:selectOneMenu>
问题是我收到验证错误:除了第一个,所有项目的值都无效。 方法:
public String calculateExpDate(int days) {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DATE, days);
Format formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
System.out.println("data: " + formatter.format(cal.getTime()));
return formatter.format(cal.getTime());
}
以良好的格式返回String。 system.out的输出:
INFO: data: 10/10/2013 20:40:04
问题出在哪里?我根本不知道
答案 0 :(得分:2)
一个好人!
如果你得到的是VALIDATION错误,而不是CONVERSION问题,那么可能的情况是:
如果您将支持bean移动到查看范围(或会话范围),或者削减精度,它应该可以工作。或者更好的是 - 使用NOW,IN_2_DAYS,IN_4_DAYS等值创建枚举。并在选择枚举后计算实际日期。
答案 1 :(得分:1)
fdreger是对的!我把他的帖子标记为答案。谢谢:) 如果你是懒惰的话,这是我的解决方案(不过我认为可能做得更好):
JSF:
<h:selectOneMenu class="time" id="time" value="#{auctionBean.choosenOption}">
<f:selectItems value="#{auctionBean.days}" var="days" itemValue="#{days}" itemLabel="#{days.label}"/>
</h:selectOneMenu>
我的auctionBean的片段:
public enum Days {
IN_1_DAY("1 dzień", 1),
IN_4_DAYS("4 dni", 4),
IN_7_DAYS("7 dni", 7),
IN_14_DAYS("14 dni", 14);
private String label;
private int days;
private Days(String label, int days) {
this.label = label;
this.days = days;
}
public String getLabel() {
return label;
}
public Date calculateExpDate() {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DATE, this.days);
return cal.getTime();
}
}
private Days choosenOption;
public void setChoosenOption(Days choosenOption) {
this.choosenOption = choosenOption;
expDate = choosenOption.calculateExpDate();
}
public Days getChoosenOption() {
return choosenOption;
}
public Days[] getDays() {
return Days.values();
}
用户选择他的拍卖应该活动多少天,我计算什么是到期日。 expDate是Date对象,在我选择单个枚举和sumbitting表单后,我只设置了一次。非常好的解决方案建议:)