栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何针对多种模式验证输入日期?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何针对多种模式验证输入日期?

创建一个

<f:attribute>
在组件上接受多个模式的自定义转换器。

这就是您想要的视图外观:

<h:inputText id="input" value="#{bean.date}">    <f:converter converterId="multiDateConverter" />    <f:attribute name="pattern1" value="MM/dd/yyyy" />    <f:attribute name="pattern2" value="MM-dd-yyyy" /></h:inputText>

转换器的外观如下(对于JSF 1.x,将其注册为

<converter-id>multiDateConverter</converter-id>

faces-config.xml
代替)

@FacesConverter(value="multiDateConverter")public class MultiDateConverter implements Converter {    @Override    public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {        List<String> patterns = getPatterns(component);        Date date = null;        for (String pattern : patterns) { SimpleDateFormat sdf = new SimpleDateFormat(pattern); sdf.setLenient(false); // Don't parse dates like 33-33-3333. try {     date = sdf.parse(value);     break; } catch (ParseException ignore) {     // }        }        if (date == null) { throw new ConverterException(new FacesMessage("Invalid date format, must match either of " + patterns));        }        return date;    }    @Override    public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException {        return new SimpleDateFormat(getPatterns(component).get(0)).format((Date) value);    }    private static List<String> getPatterns(UIComponent component) {        List<String> patterns = new ArrayList<String>();        for (int i = 1; i < Integer.MAX_VALUE; i++) { String pattern = (String) component.getAttributes().get("pattern" + i); if (pattern != null) {     patterns.add(pattern); } else {     break; }        }        if (patterns.isEmpty()) { throw new IllegalArgumentException("Please provide <f:attribute name="patternX"> where X is the order number");        }        return patterns;    }}

请注意,它仅选择第一个(默认)模式来重新显示该值。因此,在上面的示例中,如果输入

05-10-2011
,则它将重新显示为
05/10/2011


具体问题 无关 ,这种模式

MM-dd-yyyy
不是很常见。您不是要使用
dd-MM-yyyy
吗?



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/451494.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号