Primefaces日期转换器的输入掩码

时间:2015-12-24 18:42:01

标签: jsf jsf-2 primefaces

好。我发现在所有地方,我仍然没有解决方案。我需要使用Primefaces做一个输入掩码,并将值绑定到我的bean中的Date对象。

问题是:我使用带有我自己代码的所有验证,转换和格式的转换器。我的回答是:其他解决方案是否具有更好的性能。希望如此。请帮忙。

P / D:我不需要使用挑选。我需要输入掩码来执行此操作

2 个答案:

答案 0 :(得分:4)

我用这个:

<div style="margin-bottom:1em;font-size: 1.2em;"> 
    <p:inputMask id="dob" mask="99/99/9999" value="#{viewMB.request.dateOfBirth}" style="width:8em;" >
        <f:convertDateTime pattern="MM/dd/yyyy" />
    </p:inputMask>
    <p:watermark  value="MM/DD/YYYY" for="dob" />
</div>

如果愿意,您仍然可以添加自定义验证器。

答案 1 :(得分:2)

嗯,这是我的解决方案

<h:form>
      <p:inputMask mask="99-99-9999" value="#{mask.date}" converterMessage="Invalid Date!" converter="dateconverter" />
      <h:commandButton actionListener="#{mask.submit()}" value="Submit" />
</h:form>

转换器

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    System.out.println(value);
    if (value != null) {
        try {
            if (validateDate(value)) {
                return convertDate(value).toDate();
            }
            else{
                throw new ConverterException("Invalid date!");
            }
        } catch (Exception e) {
            throw new ConverterException("Invalid date!");
        }
    }
    throw new ConverterException("Null String!");
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    System.out.println(value);
    if (value != null) {
        try {
            Date now = (Date)value;
            DateTime d = new DateTime(now);
            return d.getDayOfMonth() + "-" + d.monthOfYear() + "-" + d.getYear();
        } catch (Exception e) {
            throw new ConverterException("Convertion failure!");
        }
    }
    throw new ConverterException("Null object!");
}
private boolean validateDate(String param) throws ParseException{
    //Param is a date format from input mask
    String[] values = param.split("-");
    int day = Integer.valueOf(values[0]);
    int month = Integer.valueOf(values[1]);
    int year = Integer.valueOf(values[2]);
    DateTime converted = convertDate(param);
    if (converted.getDayOfMonth() != day || converted.getMonthOfYear() != month || converted.getYear() != year) {
        return false;
    }
    else{
        return true;
    }
}
private DateTime convertDate(String param) throws ParseException{
   SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
   Date convertedCurrentDate = sdf.parse(param);
   return new DateTime(convertedCurrentDate);
}

Managed Bean

@ManagedBean(name="mask")
public class MaskBean {

private Date date;

public Date getDate() {
    return date;
}

public void setDate(Date date) {
    this.date = date;
}

public void submit(){
    RequestContext context = RequestContext.getCurrentInstance();
    context.execute("alert('date submited: value recibed " + date.toString() + "')");
}

}

它对我有用。