中设置日期格式使用日期时间转换器

发布于 2024-08-19 15:27:16 字数 1646 浏览 5 评论 0原文

我有一个 ,其中包含 ,其中加载了 CategoryHistory 对象。我仅将 Date date 字段显示为 itemLabel。 这可行,但我想格式化日期: 我创建了一个扩展 javax.faces.convert.DateTimeConverter 的转换器并更改构造函数中的字段。但我的日期仅以默认格式显示:(

DateAndTimeConverter.java

import javax.faces.bean.ManagedBean;
import javax.faces.convert.Converter;
import javax.faces.convert.DateTimeConverter;
import javax.faces.convert.FacesConverter;

@FacesConverter(value = "dateAndTimeconverter")
@ManagedBean
public class DateAndTimeConverter extends DateTimeConverter implements Converter {

 public DateAndTimeConverter(){  
  this.setDateStyle("short");
 }

xhtml

 <h:selectOneMenu valueChangeListener="#{admin.categoryHistoryListener}"
    onchange="submit()" value="#{admin.categoryHistory.id}" converter="#{dateAndTimeconverter}">       
  <f:selectItems value="#{admin.categoryHistories}" var="n"
     itemValue="#{n.id}" itemLabel="#{n.date}">
  </f:selectItems>
 </h:selectOneMenu>

当我尝试时它也不起作用:

<h:selectOneMenu valueChangeListener="#{admin.categoryHistoryListener}"
    onchange="submit()" value="#{admin.categoryHistory.id}">
  <f:converter converterId="dateAndTimeconverter"/>       
  <f:selectItems value="#{admin.categoryHistories}" var="n"
     itemValue="#{n.id}" itemLabel="#{n.date}">
  </f:selectItems>
</h:selectOneMenu>

CategoryHistory 有一个日期日期,和长 id +...

谢谢

I have a <h:selectOneMenu> that has <f:selectItems> with CategoryHistory objects loaded in it. I only show the Date date field as itemLabel.
That works but I want to format the date:
I created a converter that extends javax.faces.convert.DateTimeConverter and change the fields in the constructor. But my dates only show in default format :(

DateAndTimeConverter.java

import javax.faces.bean.ManagedBean;
import javax.faces.convert.Converter;
import javax.faces.convert.DateTimeConverter;
import javax.faces.convert.FacesConverter;

@FacesConverter(value = "dateAndTimeconverter")
@ManagedBean
public class DateAndTimeConverter extends DateTimeConverter implements Converter {

 public DateAndTimeConverter(){  
  this.setDateStyle("short");
 }

xhtml

 <h:selectOneMenu valueChangeListener="#{admin.categoryHistoryListener}"
    onchange="submit()" value="#{admin.categoryHistory.id}" converter="#{dateAndTimeconverter}">       
  <f:selectItems value="#{admin.categoryHistories}" var="n"
     itemValue="#{n.id}" itemLabel="#{n.date}">
  </f:selectItems>
 </h:selectOneMenu>

It also doesn't work when I try:

<h:selectOneMenu valueChangeListener="#{admin.categoryHistoryListener}"
    onchange="submit()" value="#{admin.categoryHistory.id}">
  <f:converter converterId="dateAndTimeconverter"/>       
  <f:selectItems value="#{admin.categoryHistories}" var="n"
     itemValue="#{n.id}" itemLabel="#{n.date}">
  </f:selectItems>
</h:selectOneMenu>

CategoryHistory Has a Date date, and Long id +...

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怀中猫帐中妖 2024-08-26 15:27:16

不幸的是,JSF 转换器仅适用于输入,而不适用于输入标签

你需要用其他方法来解决这个问题。例如,使用 SimpleDateFormat 设置日期格式。或者,如果您的环境支持 EL 2.2,只需直接调用转换器方法(您已经将其作为托管 bean):

<f:selectItems value="#{admin.categoryHistories}" var="n" itemValue="#{n.id}" 
    itemLabel="#{dateAndTimeconverter.getAsString(facesContext, component, n.date)}">

如果您碰巧使用 JSF 实用程序库 OmniFaces,那么你也可以使用它的 of:formatDate()< /code>函数。例如:

<f:selectItems value="#{admin.categoryHistories}" var="n" itemValue="#{n.id}" 
    itemLabel="#{of:formatDate(n.date, 'd MMM yyyy')}">

Unfortunately, the JSF converters only applies on the input value, not on the input label.

You'll need to solve this other ways. E.g. a getter which uses SimpleDateFormat to format the date. Or if your environment supports EL 2.2, simply invoke the converter method directly (you've it as managed bean already):

<f:selectItems value="#{admin.categoryHistories}" var="n" itemValue="#{n.id}" 
    itemLabel="#{dateAndTimeconverter.getAsString(facesContext, component, n.date)}">

If you happen to use JSF utility library OmniFaces, then you can also use its of:formatDate() function. E.g.:

<f:selectItems value="#{admin.categoryHistories}" var="n" itemValue="#{n.id}" 
    itemLabel="#{of:formatDate(n.date, 'd MMM yyyy')}">
云巢 2024-08-26 15:27:16

您可以在 bean 中使用转换器方法,如下所示:

public class Admin{
    ...
        public String formatDate(Date fecha, String pattern) {
            return (new SimpleDateFormat(pattern)).format(fecha);
        }
    ...
}

并且,在 f:selectItems 内的 xhtml 页面中:

<f:selectItems value="#{admin.categoryHistories}" var="n"
               itemValue="#{n.id}" itemLabel="#{admin.formatDate(n.date,'d MMM yyyy')}">
</f:selectItems>

You can use a converter method in your bean, as:

public class Admin{
    ...
        public String formatDate(Date fecha, String pattern) {
            return (new SimpleDateFormat(pattern)).format(fecha);
        }
    ...
}

And, in your xhtml page inside f:selectItems:

<f:selectItems value="#{admin.categoryHistories}" var="n"
               itemValue="#{n.id}" itemLabel="#{admin.formatDate(n.date,'d MMM yyyy')}">
</f:selectItems>
栖迟 2024-08-26 15:27:16

例子

xhtml

<h:selectOneMenu value="#{tbMonitoreoController.fechaMonitoreo}">
<f:selectItems value="#{tbMonitoreoController.fechasMonitoreo}" />

tbMonitoreoController 中的方法

public SelectItem[] getFechasMonitoreo(){
    Collection<Date> entities = getEjbFacade().getFechasMonitoreo();
    return JsfUtil.getSelectItemsFechasMonitoreo(entities, true);
}

public static SelectItem[] getSelectItemsFechasMonitoreo(Collection<Date> listDate, boolean selectOne) {
    int size = selectOne ? (listDate.size() + 1) : listDate.size();
    SelectItem[] items = new SelectItem[size];
    int i = 0;

    if (selectOne) {
        items[0] = new SelectItem(null, "---");
        i++;
    }
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
    for (Date x : listDate) {
        items[i++] = new SelectItem(x, simpleDateFormat.format(x));
    }
    return items;
}

“在此处输入图像描述"

Example

xhtml

<h:selectOneMenu value="#{tbMonitoreoController.fechaMonitoreo}">
<f:selectItems value="#{tbMonitoreoController.fechasMonitoreo}" />

Method in tbMonitoreoController

public SelectItem[] getFechasMonitoreo(){
    Collection<Date> entities = getEjbFacade().getFechasMonitoreo();
    return JsfUtil.getSelectItemsFechasMonitoreo(entities, true);
}

public static SelectItem[] getSelectItemsFechasMonitoreo(Collection<Date> listDate, boolean selectOne) {
    int size = selectOne ? (listDate.size() + 1) : listDate.size();
    SelectItem[] items = new SelectItem[size];
    int i = 0;

    if (selectOne) {
        items[0] = new SelectItem(null, "---");
        i++;
    }
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
    for (Date x : listDate) {
        items[i++] = new SelectItem(x, simpleDateFormat.format(x));
    }
    return items;
}

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文