Struts2 定义默认日期格式的最佳方式是什么

Struts2 定义默认日期格式的最佳方式是什么,struts2,internationalization,locale,Struts2,Internationalization,Locale,我用的是Struts2 我有一个属性的动作,我有一个属性人,有“日期”属性 class Person{ Date birthDate; //more properties } class MyAction implements ModelDriven<Person>{ Person person; public String create(){ person = new Person(); }

我用的是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>
班级人员{
出生日期;
//更多属性
}
类MyAction实现模型驱动{
个人;
公共字符串create(){
person=新的person();
}
公共字符串保存(){
MyPersistenceContext.save(个人);
}
@凌驾
公共PhysicalPerson getModel(){
返回人;
}
}
生日
当我调用“create”方法时,输入显示为MM/dd/yy(短格式),当我提交表单时,Struts将日期读取为相同的格式,但我希望使用“dd-MM-yyyy”格式管理日期

我看到那一页了

但是,我认为Listener方法是在过滤器之前调用的,并且不能很好地工作

使用Struts管理区域设置全局属性的最佳方法是什么

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


问候。

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

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);
}
}
公共类CustomDateConverter扩展了StrutsTypeConverter{
私有静态记录器Logger=LoggerFactory.getLogger(CustomDateConverter.class);
私有静态最终字符串默认\u格式=“dd-MM-yyyy”;
私有静态映射实例=新LinkedHashMap();
静态日期格式getInstance(字符串格式){
if(instances.containsKey(格式)){
返回instances.get(格式);
}
DateFormat DateFormat=新的SimpleDateFormat(格式);
实例.put(格式、日期格式);
返回日期格式;
}
@凌驾
公共对象convertFromString(映射映射,字符串[]值,类aClass){
试一试{
logger.info(“从字符串转换”);
DateFormat DateFormat=getInstance(默认_格式);
Date Date=(Date)dateFormat.parse(值[0]);
返回日期;
}捕获(解析异常){
返回值[0];
}
}
@凌驾
公共字符串convertToString(映射,对象o){
logger.info(“convertToString”);
DateFormat DateFormat=getInstance(默认_格式);
返回日期格式。格式(o);
}
}
用于转换器的寄存器

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

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

下一部分内容:

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

这是正确的:强制使用不同于JVM默认格式(对于请求区域设置)的日期格式的唯一方法是使用自定义的
类型转换器。但是,不能像示例中那样缓存
DateFormat
实例
DateFormat.parse(字符串)
不是线程安全的。