为什么我的List<Date>
没有被转换? <p:selectOneMenu>
项目模式如下
Thu Mar 01 00:00:00 BRT 2012
代替所需的“MM / yyyy”。
<p:selectOneMenu value="#{report003.selectedMes}">
<p:ajax update="pesquisaThomas" listener="#{report003.loadPesquisa()}" />
<f:selectItem itemLabel="[Todos]" itemValue="" />
<f:convertDateTime pattern="MM/yyyy" />
<f:selectItems value="#{report003.pesquisaMeses}" />
</p:selectOneMenu>
答案 0 :(得分:4)
转化仅适用于商品值,而不适用于商品标签。标签仅使用默认的Date#toString()
模式显示。
您最好的选择是 创建List<SelectItem>
而非List<Date>
,其中您自己转换商品标签,
List<Date> availableDates = ...;
List<SelectItem> selectItems = ...;
SimpleDateFormat sdf = new SimpleDateFormat("MM/yyyy");
for (Date availableDate : availableDates) {
selectItems.add(new SelectItem(availableDate, sdf.format(availableDate)));
}
或在<f:selectItems var>
中使用带有EL功能的itemValue
。例如,OmniFaces of:formatDate()
(或homegrow一个。)
<f:selectItems value="#{bean.availableDates}" var="date"
itemValue="#{date}" itemLabel="#{of:formatDate(date, 'MM/yyyy')}" />
此问题不是<p:selectOneMenu>
特有的问题,使用标准<h:selectOneMenu>
时会遇到完全相同的问题。
答案 1 :(得分:0)
试试这个:
托管bean
private SimpleDateFormat sdf;
(...)
@PostConstruct
public void init(){
sdf = new SimpleDateFormat("MM/yyyy");
}
public SimpleDateFormat getSdf(){
return sdf;
}
public void setSdf(SimpleDateFormat sdf){
this.sdf = sdf;
}
XHTML
<p:selectOneMenu value="#{report003.selectedMes}">
<p:ajax update="pesquisaThomas" listener="#{report003.loadPesquisa()}" />
<f:selectItem itemLabel="[Todos]" itemValue="" />
<f:selectItems value="#{report003.pesquisaMeses}"
var="mes" itemValue="#{mes}"
itemLabel="#{myMB.sdf.format(mes)}" />