Jsf 在<;f:选择项目标签>;使用DateTimeConverter
我有一个Jsf 在<;f:选择项目标签>;使用DateTimeConverter,jsf,label,converter,selectonemenu,date-formatting,Jsf,Label,Converter,Selectonemenu,Date Formatting,我有一个,其中加载了类历史对象。我仅将日期字段显示为项目标签。 这是可行的,但我想格式化日期: 我创建了一个转换器,它扩展了javax.faces.convert.DateTimeConverter,并更改构造函数中的字段。但我的日期仅以默认格式显示:( DateAndTimeConverter.java import javax.faces.bean.ManagedBean; import javax.faces.convert.Converter; import javax.faces.co
,其中加载了
类历史对象。我仅将日期
字段显示为项目标签
。
这是可行的,但我想格式化日期:
我创建了一个转换器,它扩展了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>
类别历史记录有日期和长id+
谢谢不幸的是,JSF转换器仅适用于输入值,而不适用于输入标签 您需要用其他方法来解决这个问题。例如,一个用于格式化日期的getter。或者,如果您的环境支持EL 2.2,只需直接调用converter方法(您已经将其作为托管bean使用):
不幸的是,JSF转换器仅适用于输入值,而不适用于输入标签 您需要用其他方法来解决这个问题。例如,一个用于格式化日期的getter。或者,如果您的环境支持EL 2.2,只需直接调用converter方法(您已经将其作为托管bean使用):
您可以在bean中使用转换器方法,如下所示:
public class Admin{
...
public String formatDate(Date fecha, String pattern) {
return (new SimpleDateFormat(pattern)).format(fecha);
}
...
}
并且,在xhtml页面的f:selectItems内:
<f:selectItems value="#{admin.categoryHistories}" var="n"
itemValue="#{n.id}" itemLabel="#{admin.formatDate(n.date,'d MMM yyyy')}">
</f:selectItems>
您可以在bean中使用转换器方法,如下所示:
public class Admin{
...
public String formatDate(Date fecha, String pattern) {
return (new SimpleDateFormat(pattern)).format(fecha);
}
...
}
并且,在xhtml页面的f:selectItems内:
<f:selectItems value="#{admin.categoryHistories}" var="n"
itemValue="#{n.id}" itemLabel="#{admin.formatDate(n.date,'d MMM yyyy')}">
</f:selectItems>
示例
xhtml
tbmonitorocontroller中的方法
public SelectItem[]getFechasMonitoreo(){
集合实体=getEjbFacade().getFechasMonitoreo();
返回JsfUtil.getSelectItemsFechasMonitoreo(实体,true);
}
公共静态SelectItem[]getSelectItemsFechasMonitoreo(集合列表日期,布尔selectOne){
int size=selectOne?(listDate.size()+1):listDate.size();
SelectItem[]items=新建SelectItem[尺寸];
int i=0;
如果(选择一){
items[0]=新建SelectItem(空,“--”);
i++;
}
SimpleDataFormat SimpleDataFormat=新的SimpleDataFormat(“日/月/年”);
对于(日期x:listDate){
items[i++]=newselectitem(x,simpleDateFormat.format(x));
}
退货项目;
}
示例
xhtml
tbmonitorocontroller中的方法
public SelectItem[]getFechasMonitoreo(){
集合实体=getEjbFacade().getFechasMonitoreo();
返回JsfUtil.getSelectItemsFechasMonitoreo(实体,true);
}
公共静态SelectItem[]getSelectItemsFechasMonitoreo(集合列表日期,布尔selectOne){
int size=selectOne?(listDate.size()+1):listDate.size();
SelectItem[]items=新建SelectItem[尺寸];
int i=0;
如果(选择一){
items[0]=新建SelectItem(空,“--”);
i++;
}
SimpleDataFormat SimpleDataFormat=新的SimpleDataFormat(“日/月/年”);
对于(日期x:listDate){
items[i++]=newselectitem(x,simpleDateFormat.format(x));
}
退货项目;
}
与实际问题无关:为什么声明转换器为
@ManagedBean
?与实际问题无关:为什么声明转换器为@ManagedBean
?哎哟,很痛……无论如何,谢谢:)我喜欢OmniFaces,没有这个伟大的库,JSF是不完整的!哎哟,好痛。。。无论如何谢谢:)我喜欢OmniFaces,没有这个伟大的库JSF是不完整的!
<h:selectOneMenu value="#{tbMonitoreoController.fechaMonitoreo}">
<f:selectItems value="#{tbMonitoreoController.fechasMonitoreo}" />
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;
}