【问题标题】:Whats is the best Way to Define the Default Date Format什么是定义默认日期格式的最佳方式
【发布时间】:2014-11-11 18:14:45
【问题描述】:

我正在使用 Struts2,

我有一个带有属性的动作,我有一个带有“日期”属性的人员。

class Person{
      Date birthDate;
      //more properties
}

class MyAction implements ModelDriven<Person>{
      Person person;
       public String create(){
            person = new Person();
       }
       public String save(){
            MyPersistenceContext.save(person);
       }
       @Override
       public PhysicalPerson getModel() {
           return person;
       }
}


            <label class="col-sm-2 control-label">Birthdate</label>
               <div class="col-sm-4">
                   <s:textfield name="birthDate" cssClass="form-control"></s:textfield>
                   <s:fielderror name="birthDate"
                              fieldName="birthDate"></s:fielderror>
            </div>

当我调用“创建”方法时,输入显示为 MM/dd/yy(短格式),当我提交表单时,Struts 将日期读取为相同格式,但我想管理日期格式为“dd-MM-yyyy”

我看到了页面

http://www.mkyong.com/struts2/how-to-configure-global-resource-bundle-in-struts-2/

但是,我认为Listener方法是在Filter之前调用的,效果不好。

用 Struts 管理 Locale Global Properties 的最佳方法是什么???

通过 Http 会话用户设置区域设置的最佳方法是什么。

问候。

【问题讨论】:

标签: struts2 internationalization locale


【解决方案1】:

我已经用转换器解决了我的问题,我不知道这是否是最好的方法……但我终于可以做到了。

public class CustomDateConverter extends StrutsTypeConverter {

private static Logger logger = LoggerFactory.getLogger(CustomDateConverter.class);

private static final String DEFAULT_FORMAT = "dd-MM-yyyy";
private static Map<String, DateFormat> instances = new LinkedHashMap<>();

static DateFormat getInstance(String format) {
    if (instances.containsKey(format)) {
        return instances.get(format);
    }
    DateFormat dateFormat = new SimpleDateFormat(format);
    instances.put(format, dateFormat);
    return dateFormat;
}

@Override
public Object convertFromString(Map map, String[] values, Class aClass) {
    try {
        logger.info("convert from string");
        DateFormat dateFormat = getInstance(DEFAULT_FORMAT);
        Date date = (Date) dateFormat.parse(values[0]);
        return date;
    } catch (ParseException e) {
        return values[0];
    }
}
@Override
public String convertToString(Map map, Object o) {
    logger.info("convertToString");
    DateFormat dateFormat = getInstance(DEFAULT_FORMAT);
    return dateFormat.format(o);
}
}

用于注册转换器

我已经创建了一个文件(资源)

src/main/resources/xwork-conversion.properties(Maven 结构)

接下来的内容:

 # syntax: <type> = <converterClassName>
 java.util.Date=com.roshka.javorai.webapp.struts.converter.CustomDateConverter

【讨论】:

  • 这是正确的:强制使用不同于 JVM 的默认格式(对于请求区域设置)的日期格式的唯一方法是使用自定义 TypeConverter。但是,您不得像示例中那样缓存您的 DateFormat 实例。 DateFormat.parse(String) 不是线程安全的。
猜你喜欢
  • 2016-07-03
  • 2013-06-14
  • 2020-01-08
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
相关资源
最近更新 更多