2

SelectOneMenu我在我的 jsf 页面中选择了一个,但显示日期如

2013 年 5 月 30 日星期四 00:00:00 WET

但我想在 jsf 页面中像 30/06/2013 一样显示它。这就是我在我的 jsf 页面中的代码:

<p:selectOneMenu id="Dateplanif" value="#{ gestionduplanning.dateplanificationnew}"> 
      <f:selectItems value="#{gestionduplanning.datelist}" var="da" itemValue="#{da}" itemLabel="#{da}"  />  
 </p:selectOneMenu> 

我在 jsf 中显示我的日期列表,用户需要选择其中一个,但我想像 dd/MM/yyyy 一样播种。

这是我的托管 bean 的一部分:

List<Date> datelist = new ArrayList<Date>();
Date dateplanificationnew ;

public void initialize() {
     DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");  
     datelist = manageOfPlanifie.retournerdatedesplanif();
      }  

我怎样才能像 dd/MM/yyyy 一样显示它??

更新 1:

我使用了@mekk work 的解决方案,但我无法验证并获得 date 的值,这就是我得到的 在此处输入图像描述

如何解决?

4

7 回答 7

3

您需要转换 的项目标签<h:selectOneMenu><f:convertDateTime>不适用,因为它仅适用于项目值不适用于项目标签。在您的情况下,标签只是使用默认Date#toString()模式呈现,该模式确实采用javadocThu May 30 00:00:00 WET 2013中描述的格式。

您最好的选择是创建一个List<SelectItem>而不是List<Date>您自己转换项目标签,

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

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

<f:selectItems var>itemValue. _ 例如,OmniFacesof:formatDate()(或自制的)。

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

顺便说一下,这个问题不是特定的<p:selectOneMenu>,使用标准时您会遇到完全相同的问题<h:selectOneMenu>

请注意,您仍然需要<f:convertDateTime>项目值,否则您可能会Validation Error: Value is not valid因为时差而出错:JSF 2 - f:selectItems with a Date keyed Map

于 2013-06-06T13:52:28.710 回答
1

尝试添加这个:

convertDateTime pattern="yyyy/MM/dd" 

在你的selectItems. 我不确定这是否适用于您的情况,但它的日期条款,除了创建 EL 函数转换,我使用这个。

于 2013-06-06T11:20:32.070 回答
1
<h:body>
    <h:form>
        <p:selectOneMenu>
            <f:selectItems value="#{test.dates}" itemValue="#{currentDate}" var="currentDate"  itemLabel="#test.formatDate(currentDate)}" />
        </p:selectOneMenu>
    </h:form>
</h:body>

并将 formatDate() 定义为

public static String formatDate(Date currentDate) {
     DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");   
     return dateFormat.format(currentDate);
}
于 2013-06-06T12:51:15.903 回答
1

使用OmniFaces#{of:formatDate()}功能。它会像魅力一样工作。OmniFaces 可以与 PrimeFaces 或 ADF 结合使用。

下面是我的应用程序中的示例代码。

<p:selectOneMenu value="#{periodId}">
   <f:selectItem itemLabel="#{appmsg['global.please_choose']}" itemValue=""/>
   <f:selectItems value="#{listPeriod}" var="p" itemValue="#{p.id}"
       itemLabel="#{of:formatDate(p.startDate, 'dd MMMM yyyy')" />
</p:selectOneMenu>
于 2015-02-18T02:59:00.680 回答
1

我找到了一个解决我的问题的方法,将我的日期转换为 String 然后将它返回到 Date 。我将向您展示一个示例:

这是我的托管 bean:

public class Testbean {
    @EJB
    private ManageOfPlanifieLocal manageOfPlanifie;
    List<Date> listdate = new ArrayList<Date>();
    List<String> listdatestring = new ArrayList<String>();
    String newdate="";
    Date dateplanification;     
 @PostConstruct
    public void initialize() {
        listdate=manageOfPlanifie.retournerdatedesplanif();
        Format formatter = new SimpleDateFormat("dd/MM/yyyy");     
        for(int i=0;i<listdate.size();i++)
        {listdatestring.add(formatter.format(listdate.get(i)));}     
    }  
    public String gototest2(String datedate) throws ParseException  
    {dateplanification= new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(datedate);
        return "test2.xhtml?faces-redirect=true";
    }

test1.xhtml(我的第一个 jsf 页面)

<h2>Choix de l'equipe</h2>  
         <h:outputLabel for="dateplanif" value="date de planification : " />
         <p:selectOneMenu id="dateplanif"  value="#{testbean.newdate}" >             
             <f:selectItems value="#{testbean.listdatestring}" var="da" itemValue="#{da}" itemLabel="#{da}" />  
    </p:selectOneMenu>           

      <p:commandButton value="suivant"  style="color:black;" action="#{testbean.gototest2(testbean.newdate)}" update="@form" />

test2.xhtml

 <h:outputText value="Date : "/>   
 <h:outputText value="#{testbean.dateplanification}" />   

这个解决方案对我来说效果很好,并且在 selectOneMenu 中解决了问题。

于 2013-06-06T16:14:40.893 回答
0

为什么不在支持 bean 中更改日期模式,然后再将其填充到<p:selectOneMenu>? 那会更容易。

<h:body>
    <h:form>
        <p:selectOneMenu>
            <f:selectItems value="#{test.dates}"/>
        </p:selectOneMenu>
    </h:form>
</h:body>

像这样的Bean:

private List<String> dates;

public List<String> getDates() {
    return dates;
}

public void setDates(List<String> dates) {
    this.dates = dates;
}
public Test() {
    dates = dateList();
}
public List<String> dateList(){

    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    List<String> list = new ArrayList<String>();
    Date date1 = new Date();
    Date date2 = new Date(2013, 01, 01);
    list.add(dateFormat.format(date1));
    list.add(dateFormat.format(date2));
    return list;
}

看看这是否有帮助。

于 2013-06-06T10:51:15.347 回答
0

您可以使用全方位。有以下链接示例。 http://showcase.omnifaces.org/functions/Dates

于 2013-06-06T10:56:19.723 回答