为什么f:convertDateTime不能转换p:selectOneMenu的标签?

时间:2012-09-26 14:08:44

标签: jsf primefaces converter

为什么我的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>

2 个答案:

答案 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)}" />