2013-12-17 3 views
1

Мне интересно, как конвертировать String в Date в Struts2. У меня есть простая форма, в которой пользователь предоставляет дату в этом формате "yyyy-MM-dd". После представления карт Sturts2 это будет бина. Я получил ошибку в преобразовании даты. Я Google это много и каждый, где говорится, что для этого мы должны использовать специальный конвертер типов. Я не хочу писать конвертер пользовательского типа для преобразования даты. Я думаю, что в Struts2 должен быть простой механизм преобразования данных, поскольку преобразование данных является очень распространенной функциональностью.Преобразование даты в Struts2

JSP

<s:form action="AddDomain"> 
    <s:push value="idp"> 
     <s:textfield name="domainName"   label="Domain Name" /> 
     <s:textfield name="url"    label="Domain URL" /> 
     <s:textfield name="noOfLicense"  label="License Purchased" /> 

     <s:textfield name="licenseExpireDate" label="License Expire Date" 
               title="YYYY-MM-DD like 2013-01-21" /> 

     <s:textfield name="userActiveDuration" label="Active User Duration" 
               title="please mention in days" /> 

     <s:textarea name="notes"    label="Note" cols="30" rows="5" ></s:textarea> 

     <s:submit value="Add" /> 
    </s:push> 
</s:form> 

Это JSP где пользователь вводит входные данные.

Модель Класс

@Entity 
@Table(name = "Domain") 
public class IdentityProvider implements Serializable { 

    @Id 
    @Basic(optional = false) 
    private String url; 
    private String domainName; 
    private int noOfLicense; 
    private int userActiveDuration; 
    private int activeUsers; 
    private Date licenseExpireDate; 
    private String notes; 

    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private String domainIdCode; 

    public IdentityProvider(String name, String url, int nol, int time,Date d,String notes) { 
     this.setDomainName(name); 
     this.setUrl(url); 
     this.setNoOfLicense(nol); 
     this.setUserActiveDuration(time); 
     this.setLicenseExpireDate(d); 
     this.setNotes(notes); 
    } 

    public IdentityProvider() { 

    } 

    // Getter Setter 
} 

Действие Класс

public class DomainManagementAction extends ActionSupport 
           implements ModelDriven<IdentityProvider> { 

    private IdentityProvider idp = new IdentityProvider(); 

    public IdentityProvider getIdp() { 
     return idp; 
    } 

    public void setIdp(IdentityProvider idp) { 
     this.idp = idp; 
    } 

    public String saveDomain() { 
     IDPBroker broker = new IDPBroker(); 
     broker.saveDomain(idp); 
     return ActionSupport.SUCCESS; 
    } 


    @Override 
    public IdentityProvider getModel() { 
     // TODO Auto-generated method stub 
     return idp; 
    } 

} 

ответ

7

Struts2 Type Conversion

Встроенная поддержка преобразования типа

Тип Преобразование реализуется XWork.

XWork автоматически обработает наиболее распространенное преобразование типа для вас. Это включает в себя поддержку для преобразования и из строк для каждого следующий:

Строки
булева/булевой
полукокса/Character
INT/Integer, Float/Float, длинного/длинного, двойные/Double
даты - использует формат SHORT для локали, связанный с текущим запросом
массивы - при условии, что отдельные строки могут быть закрыты для отдельных элементов.
коллекции - если тип объекта не может быть определен, предполагается, что это строка и новый ArrayL IST создается

SHORT format в JAVA:

Style  U.S. Locale French Locale 

SHORT  6/30/09  30/06/09 

Это означает, что он уже работает, но только в коротком формате, и это не настраивается. Попробуй.

Затем вы можете изменить значение на клиентском с некоторым яваскриптом хаком перед его отправкой или скопировать и вставить this small converter или использовать DateTimePicker JQuery (рекомендуется), и ваша единственная задача которого будет тема является крутым :)


EDIT

После некоторого криптографического комментарий, я попробовал, и, очевидно, это как Documentations государств.

  • Если локаль (например.) en_US, вам нужно отправить строку данных в формате MM/dd/yy.
  • Если ваш язык (например) it_IT, вам необходимо отправить данные String в формате dd/MM/yy.
  • Если вы введете dd/MM/yy с en_US Locale, вы получите ошибку проверки и результат INPUT.
  • Если вы попробуете использовать - вместо /, это не получится.
  • Если вы вводите дату в другом формате, например. dd/MM/yyyy (отличается от SHORT, но подходит для вашего Locale), ваша дата будет правильно настроена.
  • Если вы прочитали дату своего действия в JSP без его форматирования, он всегда будет отображаться в SHORT.

Тогда, как было сказано выше, если вам необходимо, чтобы пользовательский ввод даты вручную, сообщить пользователю, соблюдать правильный формат для локали (например.

<label>Input a date (dd/mm/yyyy):</label> 
<s:textfield name="aDate" /> 
<s:fielderror fieldName="aDate" /> 

Или изменить его с помощью JavaScript после ввода или использования пользовательского преобразователя.

+0

Могут ли стойки конвертировать одновременно дату и время? Например: '30/06/09 07:03 ' –

+0

Вы должны задать вопрос, так как ответ сформулирован. TL; DR да –

 Смежные вопросы

  • Нет связанных вопросов^_^