JSF 2.0 + Primefaces 2.x: привязать строку к календарю - PullRequest
2 голосов
/ 22 ноября 2011

У меня есть бин, который содержит поле типа java.lang.String. Это поле содержит текст произвольной формы, который может представлять число, строку или дату. Когда поле представляет дату, я отображаю календарь (простые символы) на экране, в противном случае отображается поле ввода.

Проблема, с которой я столкнулся, заключается в том, что после того, как пользователь выбирает дату в календаре, я бы хотел, чтобы строка даты, которая записывается в мое поле произвольной формы, имела определенный формат (MM / dd / yyyy). В настоящее время полученная строка имеет формат по умолчанию, который вы получаете, когда делаете toString() для java.util.Date объекта.

Кто-нибудь знает, как я могу контролировать формат строки, которая записывается в мое поле?

Спасибо.

Ответы [ 3 ]

1 голос
/ 22 ноября 2011

Я думаю, что следующее должно сделать это:

<p:calendar value="#{calTestBean.dateStr}" pattern="MM/dd/yyyy">
    <f:convertDateTime pattern="MM/dd/yyyy"/>
</p:calendar>
0 голосов
/ 23 августа 2018

Предполагая, что у вас есть поле String с именем "freeText" с их методами получения и установки, добавьте средство получения, которое возвращает Date, и средство установки, которое преобразует Date в String. Оба используют формат, который вы хотите. Например:

String freeText;

String getFreeText() {
    return this.freeText;
}

void setFreeText(String freeText) {
    this.freeText = freeText;
}

Date getFreeTextAsDate() {
    try {
        if (this.freeText == null) {
            return null;
        }
        return new SimpleDateFormat("MM/dd/yyyy").parse(this.freeText);
    } catch (ParseException e) {
        return null;
    }
}

void setFreeTextAsDate(Date freeTextAsDate) {
    if (freeTextAsDate== null) {
        this.freeText = null;
    } else {
        this.freeText = new SimpleDateFormat("MM/dd/yyyy").format(freeTextAsDate);
    }
}

Наконец, используйте freeTextAsDate в календаре:

    <p:calendar value="#{yourBean.freeTextAsDate}" />
0 голосов
/ 22 ноября 2011

Вы можете использовать атрибут pattern простых лиц calendar: pattern="MM/dd/yyyy" или класс java SimpleDateFormat для форматирования на стороне сервера и манипулирования данными (для лучшего контроля над строковой датой):

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
Date myReceivedDate = dateFormat.parse(receivedStringDate);
String myNewDate = dateFormat.format(myReceivedDate);
...