【问题标题】:Why does f:convertDateTime not convert labels of p:selectOneMenu?为什么 f:convertDateTime 不转换 p:selectOneMenu 的标签?
【发布时间】:2012-09-26 14:08:43
【问题描述】:

为什么我的List<Date> 没有被转换? <p:selectOneMenu> items 模式看起来像 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>

【问题讨论】:

  • 请编辑并改进您的问题。您忘记详细说明“不起作用”。你到底期待什么?究竟会发生什么?它不是以您期望的方式显示标签(!)吗?还是它产生了转换或验证错误?

标签: jsf primefaces converter


【解决方案1】:

转换仅适用于商品价值,不适用于商品标签。标签只是使用默认的Date#toString() 模式呈现。

您最好的选择是或者创建一个List&lt;SelectItem&gt; 而不是List&lt;Date&gt;,您可以在其中自己转换项目标签,

List<Date> availableDates = ...;
List<SelectItem> selectItems = ...;
SimpleDateFormat sdf = new SimpleDateFormat("MM/yyyy");

for (Date availableDate : availableDates) {
    selectItems.add(new SelectItem(availableDate, sdf.format(availableDate)));
}

&lt;f:selectItems var&gt;itemValue 中的EL 函数一起使用。例如,OmniFaces of:formatDate()(或homegrow 之一)。

<f:selectItems value="#{bean.availableDates}" var="date" 
    itemValue="#{date}" itemLabel="#{of:formatDate(date, 'MM/yyyy')}" />

顺便说一下,这个问题不是&lt;p:selectOneMenu&gt; 特有的,使用标准&lt;h:selectOneMenu&gt; 时会遇到完全相同的问题。

【讨论】:

    【解决方案2】:

    试试这个:

    托管豆

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-13
      • 2017-04-02
      • 1970-01-01
      • 2010-12-23
      • 2012-10-18
      • 2012-10-01
      • 1970-01-01
      相关资源
      最近更新 更多